gpt4 book ai didi

scala - Scala中Pi的蒙特卡洛计算

转载 作者:行者123 更新时间:2023-12-04 03:11:28 26 4
gpt4 key购买 nike

假设我想用蒙特卡洛模拟作为练习来计算Pi。

我正在编写一个函数,该函数随机选择正方形(0, 1), (1, 0)中的一个点并测试该点是否在圆内。

import scala.math._
import scala.util.Random

def circleTest() = {
val (x, y) = (Random.nextDouble, Random.nextDouble)
sqrt(x*x + y*y) <= 1
}

然后,我正在编写一个函数,该函数将测试函数和试验次数作为参数,并返回其中发现测试正确的试验分数。
def monteCarlo(trials: Int, test: () => Boolean) =
(1 to trials).map(_ => if (test()) 1 else 0).sum * 1.0 / trials

...我可以计算出Pi
monteCarlo(100000, circleTest) * 4

现在,我想知道 monteCarlo函数是否可以改进。您将如何高效且易读地编写 monteCarlo

例如,由于试验次数众多,是否值得使用 viewiterator代替 Range(1, trials)reduce代替 mapsum

最佳答案

基于流的版本,另一个替代方案。我认为这很清楚。

def monteCarlo(trials: Int, test: () => Boolean) =
Stream
.continually(if (test()) 1.0 else 0.0)
.take(trials)
.sum / trials

( sum不是专门用于流的,但是实现(在TraversableOnce中)只是调用专门的 foldLeft并“允许GC沿途收集。”因此,.sum不会强制对流进行求值,因此也不会。一次将所有试验都保存在内存中)

关于scala - Scala中Pi的蒙特卡洛计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25647407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com