我尝试了各种方法来实施一项计划,让连续圆周率的数字。 我试过泰勒级数方法,但它被证明极其缓慢收敛(当我相比,我用了一段时间后,在线值结果)。 无论如何,我想更好的算法。
因此,在编写程序我被困在一个问题,因为所有的算法:我怎么知道n
,我已经计算出的数字是准确的?
我尝试了各种方法来实施一项计划,让连续圆周率的数字。 我试过泰勒级数方法,但它被证明极其缓慢收敛(当我相比,我用了一段时间后,在线值结果)。 无论如何,我想更好的算法。
因此,在编写程序我被困在一个问题,因为所有的算法:我怎么知道n
,我已经计算出的数字是准确的?
由于我对圆周率的最位的现世界纪录保持者,我将添加我的两分钱 :
除非你真的创下了新的世界纪录时,通常的做法是,只是为了验证对已知值计算出的数字。 所以这是很简单的。
其实,我有一个网页,列出的数字片断对他们核实计算的目的: http://www.numberworld.org/digits/Pi/
但是,当你进入世界纪录的领土,没有什么比对。
在历史上,用于验证计算的数字是正确的标准方法是重新计算使用第二算法的数字。 所以,如果任一计算变坏,在年底的数字不匹配。
这确实通常超过两倍所需的时间量(由于第二算法通常较慢的是)。 但它的验证计算的数字,一旦你已经流浪到的计算以前从未数字处女地和一个新的世界纪录的唯一途径。
返回在超级计算机中设置记录的日子里,两个不同的AGM算法是常用的有:
这些均为O(N log(N)^2)
的算法,是相当容易实现。
但是,现在,事情有点不同。 在过去三年的世界纪录,而不是执行两次计算,我们使用目前最快的公式(只有一个计算Chudnovsky公式 ):
该算法更难实现,但它比AGM算法快很多。
然后,我们验证使用的二进制数字的位数提取BBP公式 。
这个公式可以让你计算任意二进制数字没有之前计算所有数字。 所以用它来验证过去几年计算的二进制数字。 因此,这是不是一个完整的运算速度要快得多 。
这样做的好处是:
缺点是:
我已经掩盖了为什么验证的最后几个数字的一些细节,意味着所有的数字都是正确的。 但它是很容易看到这一点,因为任何计算误差将传播到最后一个数字。
现在,这最后一步(验证转换)实际上是相当重要的。 一个以前的世界纪录保持者, 实际上叫我们出去是因为,首先,我没有给它是如何工作的充分说明。
所以,我拉着从我的博客这个片段:
N = # of decimal digits desired
p = 64-bit prime number
计算用底座10的算术和用乙二进制算术。
如果A = B
,则用“极高概率”,转换是正确的。
如要进一步了解,请参见我的博客文章丕- 5个万亿位数 。
毫无疑问,你的目的(我假设只是一个编程练习),最好的办法是检查你的结果对任何的PI在网络上数字的房源。
我们如何知道这些价值观是正确的? 好吧,我可以说,有计算机科学-Y的方式来证明一个算法的实现是正确的。
更务实的态度,如果不同的人使用不同的算法,他们都同意(选择一个数字)千(百万,等等)小数位,这应该给你一个温暖的模糊的感觉,他们是正确的。
从历史上看,威廉·尚克斯发表的圆周率到1873年可怜的家伙小数点后707位,他犯了一个错误开始的第528次小数位。
非常有趣的是,在1995年的算法公布 ,包括那个将直接计算圆周率的第n个数字(基数为16),而不必计算所有以前的数字财产!
最后,我希望您最初的算法不是pi/4 = 1 - 1/3 + 1/5 - 1/7 + ...
这可能是最简单的编程,但它也是这样做的最慢的方式之一。 看看维基百科上的文章PI更快的方法。
您可以使用多种方法,看看他们是否收敛到了相同的答案。 或者抓住一些从净。 的楚德诺夫斯基算法通常被用作计算pi的非常快速的方法。 http://www.craig-wood.com/nick/articles/pi-chudnovsky/
泰勒系列逼近圆周率的方法之一。 如前所述它收敛速度慢。
泰勒级数的部分和可以被示出为下一个术语的一些乘法器内从pi的真值了。
逼近圆周率等手段有类似的方式来计算最大误差。
我们知道这一点,因为我们可以用数学证明这一点。
你可以尝试计算sin(pi/2)
或cos(pi/2)
使用(相当)快速收敛功率正弦和余弦级数为此事)。 (甚至更好:使用各种倍增公式来计算更接近x=0
为更快的收敛。)
顺便说一句,不是使用一系列更好的tan(x)
是,与计算说cos(x)
为黑盒(例如,你可以使用泰勒级数如上)是通过牛顿做求根。 当然有更好的算法有,但如果你不希望验证吨这个数字应该足以(和它并不刁钻实现,而你只需要一点微积分的理解,为什么它的工作原理。)