我曾尝试使用蒙特卡洛发现π许多算法。 一种解决方案(在Python)是这样的:

def calc_PI():
    n_points = 1000000
    hits = 0

    for i in range(1, n_points):
        x, y = uniform(0.0, 1.0), uniform(0.0, 1.0)

        if (x**2 + y**2) <= 1.0:
            hits += 1

    print "Calc2: PI result", 4.0 * float(hits) / n_points

不幸的是,即使与十亿精度非常不好(的 3.141 ... )。

这是最大精度这种方法可以提供? 我选择蒙特卡洛的原因是,它很容易突破它平行的部分。 有另一种算法为π,很容易碎裂成片,并计算?

有帮助吗?

解决方案

这是蒙特卡洛的一个典型的例子。但是,如果你想打破圆周率计算到并行的部分,为什么不使用一个无穷级数,并让每个核心需要的范围,再总结的结果,当您去?

http://mathworld.wolfram.com/PiFormulas.html

其他提示

您的分数误差由sqrt(N)/N = 1/sqrt(N)去,所以这是一个非常低效的方式来获得精确的估计。此限制是由测量的统计特性设置,并且不能被打

您应该能够获得有关良好的精度floor(log_10(N))/2-1抛出N数字。也许-2只是为了安全起见...

即使在它假设你使用的是真正的RNG或一个足够好的PRNG。

使用的准随机数发生器( http://www.nag.co。英国/ IndustryArticles / introduction_to_quasi_random_numbers.pdf )而不是标准伪RNG。准随机数覆盖区域一体化(你在做什么是MC集成)比更加均匀的伪随机数,从而更好的收敛性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top