我如何确定我的pi计算是否准确?

我正在尝试各种方法来实现一个顺序给出pi数字的程序。 我尝试了泰勒级数的方法,但它证明收敛速度非常缓慢(在一段时间后我将结果与在线值进行比较时)。 无论如何,我正在尝试更好的算法。

所以,在编写程序时,我遇到了一个问题,就像所有的算法一样:我怎么知道我计算的n数字是准确的?


由于我是目前pi数最多的世界纪录保持者,因此我会补充我的两分钱:

除非你真的设定了一个新的世界记录,否则通常的做法就是根据已知值验证计算的数字。 这很简单。

事实上,我有一个网页列出了数字片段,用于验证对他们的计算:http://www.numberworld.org/digits/Pi/


但是当你进入世界纪录的领域时,没有什么可比的。

历史上,验证计算数字是否正确的标准方法是使用第二种算法重新计算数字。 所以如果任何一个计算结果不好,最后的数字将不匹配。

这通常是所需时间的两倍以上(因为第二种算法通常较慢)。 但是,一旦你走进未曾计算的数字和新的世界纪录的未知领域,这是验证计算数字的唯一方法。


回到超级计算机设置记录的日子,通常使用两种不同的AGM算法:

  • Gauss-Legendre算法
  • Borwein的算法
  • 这些都是O(N log(N)^2)算法,相当容易实现。

    但是,现在,情况有些不同。 在最近的三次世界记录中,我们不是执行两次计算,而是使用已知公式最快的公式(Chudnovsky公式)执行一次计算:

    该算法实施起来要困难得多,但它比AGM算法快得多。

    然后我们使用BBP公式来验证数字提取的二进制数字。

    该公式允许您计算任意二进制数字,而不必计算它之前的所有数字。 所以它被用来验证最后几个计算的二进制数字。 因此,这是不是一个完整的运算速度要快得多

    这样做的好处是:

  • 只需要一个昂贵的计算。
  • 缺点是:

  • 需要Bailey-Borwein-Plouffe(BBP)公式的实现。
  • 需要额外的步骤来验证从二进制到十进制的基数转换。
  • 我已经详细说明了为什么验证最后几位意味着所有数字都是正确的。 但很容易看到这一点,因为任何计算错误都会传播到最后的数字。


    现在最后一步(验证转换)实际上相当重要。 之前的世界纪录保持者之一实际上就此向我们发出了邀请 ,因为最初,我没有给出足够的关于它如何工作的描述。

    所以我从我的博客中拉出了这个片段:

    N = # of decimal digits desired
    p = 64-bit prime number
    

    使用二进制算法计算使用base 10算法和B。

    如果A = B ,那么以“非常高的概率”,转换是正确的。


    要进一步阅读,请参阅我的博客文章Pi - 5 Trillion Digits


    毫无疑问,为了您的目的(我认为这只是一个编程练习),最好的办法是根据网络上任何pi数字列表检查结果。

    我们如何知道这些值是正确的? 那么,我可以说有计算机科学方法来证明算法的实现是正确的。

    更实际的是,如果不同的人使用不同的算法,并且他们都同意(选择一个数字)一千(百万,不管)小数位,那应该给你一个温暖的模糊感觉,他们说得对。

    历史上,William Shanks在1873年将pi发布到了707个小数位。可怜的人,他在小数点后第五十二个位置开了一个错误。

    非常有趣的是,在1995年发布了一个算法,该算法具有直接计算pi的第n位(基数为16)的属性,而无需计算以前的所有数字!

    最后,我希望你的初始算法不是pi/4 = 1 - 1/3 + 1/5 - 1/7 + ...这可能是最简单的编程,但它也是最慢的方法之一。 查看维基百科上的pi文章以获得更快的方法。


    你可以使用多种方法,看看他们是否收敛到相同的答案。 或者从网上抢一些。 Chudnovsky算法通常用作计算pi的非常快速的方法。 http://www.craig-wood.com/nick/articles/pi-chudnovsky/

    链接地址: http://www.djcxy.com/p/1919.html

    上一篇: How do I determine whether my calculation of pi is accurate?

    下一篇: How to Sort a List<T> by a property in the object