小编Fly*_*ert的帖子

与例如 Java 相比,F# 性能较差。我究竟做错了什么?

我目前正在尝试使用 F# 进行编程。因此,我编写了一个简单的 F# 脚本以非常愚蠢的方式计算 PI。我已经用许多编程语言编写了这个算法,但这次它的执行速度很慢,我不知道我做错了什么。与我的 Java 版本相比,这里的速度大约慢 10-20 倍(在我的机器上通过按 Alt+Enter 在 VS Code 中运行大约 10-15 sek),这是很多(在我看来)。

算法的想法是在一个 1 x 1 的正方形上扔飞镖,里面有一个圆圈。圆接触正方形的边缘。如果飞镖击中圆圈,它就会被计算在内。投出所有飞镖后,您只需将飞镖命中数除以飞镖总数,然后乘以 4 即可得到 PI。

我尝试了很多方法来解决我的错误,但找不到。

  • 我试图用固定值替换随机数生成 -> 没有做太多
  • 我试图用恒定值替换 Math.Sqrt -> 没有做太多
  • 我用数组替换了 Seq.xxx 调用,同时希望这会减少开销。-> 没有做太多

PS:我知道这种计算 Pi 的方法很糟糕。但这不是我在这里试图提出的重点。

open System

let random = Random(DateTime.Now.Millisecond)
let throwDart i = (random.NextDouble(), random.NextDouble())

let distance dart point = let (x1, y1), (x2, y2) = dart, point
                          (x2 - x1, y2 - y1)
let length distance = let (x, y) = distance …
Run Code Online (Sandbox Code Playgroud)

performance f# sequence

1
推荐指数
1
解决办法
111
查看次数

标签 统计

f# ×1

performance ×1

sequence ×1