Can a Monte Carlo pi calculation be used for a world record?
我有一个随机函数来计算pi-monte-carlo样式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
如果我能重复这个10e100次,这个算法能和世界纪录相媲美吗?如果是的话,我如何才能找到将给出第n个数字的迭代次数呢?
这是一个计算圆周率的很好的练习,但它可能是一个非常低效的练习。一些评论:
我喝咖啡之前的统计数据已经不可靠了,但我猜
1 / sqrt(n_guess) 的误差等级是多少。要得到n位数,您需要一个EDOCX1[1]的错误,所以您需要大致的EDOCX1[2]随机猜测。如果你按照你的建议做1E100个猜测,你只能得到50位数的π!因此,迭代次数是所需位数的某种指数函数,速度非常慢。一个好的算法可能在你想要的位数上是线性的。由于需要大量的猜测,您必须开始质疑随机数生成器的质量。
您的算法将被浮点错误限制为1E-16左右。计算圆周率的位数需要某种任意精度的数字格式。
为了加快算法的速度,可以省略sqrt()。
不要使用名为
max 的变量,这样会覆盖现有的函数。使用n_猜测左右。
快速而肮脏的测试来证明我的理论(咖啡后):
1 2 3 4 5 6 7 8 |
简短回答:不。
根据你的链接,世界纪录是1E13位数字。如果您可以运行蒙特卡罗算法来获取10e100个样本,您将获得一个pi的估计值,其相对均方根误差为1/sqrt(10e100)=.3e-50(见下文)。这只是第50位的精度。此外,这只是一个"概率"精度:你不能肯定前50位数字是正确的;你只能告诉他们有很高的概率是正确的。
找到n位数精度所需的蒙特卡罗样本数的一般规则是:m蒙特卡罗样本将为您提供1/sqrt(m)的相对均方根精度。这意味着估计值与真实值的偏差约为真实值的1/sqrt(m)分数。为了合理地确信n位是正确的,您需要一个比10 ^-n更好的相对均方根精度,根据所述规则,这需要m=10 ^(2n)个样本。
因此,如果希望(概率)精度为1E13位,则需要10^2E13蒙特卡罗样本,这是不可管理的。