圆周率\pi的计算及纪录

今天gezhi上有一篇关于\pi的八卦文章,里面讲到了\pi的计算问题。但我对其中的一些数据起了疑心,并不是说数据错了,而是作者所用的数据实在是太老了。

作者提到的\pi的最高纪录才八百多万位,但就我以前就见过清华某FTP上,提供\pi的120亿位的下载,总文件大小超过5G。可惜忘了在哪个服务器上看到的了。

Google找到一个纪录,圆周率206,158,430,000位,也就是2060多亿位吧。用的是Gauss-Legendre算法(Brent-Salamin),占用内存865G,计算时间消耗37个小时(不要以为这个时间没有多长,看看占用的内存量便知,计算在大型机或者计算集群上进行的)。

补充:计算在日本东京大学的Information Technology Center, Computer Centre Division进行的。所用机器有128个CPU,运算能力大约1万亿次浮点运算每秒。

这个纪录很难说是最新的,因为它是1999年的,有兴趣的可以去查一查最新的纪录是多少。

补充:查到一个纪录,2002年有一个12411亿位的纪录,似乎又是日本人做的。在这里有2002年之前的纪录列表。到这里,\pi本身的计算已经不重要了,重要的是比拼谁家的计算机NB。日本在这一方面的实力确实有目共睹。

\pi的计算是一个非常有趣的话题,一般来说,都是利用级数来计算的,所以,级数的收敛速度越快,计算复杂度越低,比如Gregory-Leibniz series

\pi=4(1-\frac13+\frac15-\frac17+\cdots)

就是一个收敛性能非常糟糕的级数,但下面这个

\pi = 3 \sum_{n=0}^\infty \frac{(2n)!}{n!^2 (2n+1) 16^n} = 3 + \frac{1}{8} + \frac{9}{640} + \frac{15}{7168} + \cdots

收敛地快多了。

另外贴一个\pi的算法,我一直没看懂过,算法高手出来解释一下?

#include <stdio.h>
long a=10000,b,c=2800,d,e,f[2801],g;
void main(){ 
  for(;b-c;)f[b++] =a/5;
  for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a) 
  for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
}

查看更多关于, , 的内容。

你可能感兴趣的
相关文章

5条留言

  • At 2007.05.06 18:21, wangcong said:

    我一年多以前写的一篇文章,来解释那段代码:
    http://wangcong.org/articles/puzzle.html

    • At 2007.05.06 22:15, zhiqiang said:

      多谢WangCong,网络上的确牛人荟萃哈。

      那个程序的关键还在于\pi的计算公式,
      \pi=2\sum_{n=0}^{+\infty}\frac{n!}{(2n+1)!!}
      以前没见过这个表达式...

    • At 2007.05.06 19:02, 伍岭 said:

      感谢,再感谢tb的好处。

      我提到的是83年的最高纪录,呵呵。我觉得更高也没什么要说的了,无非考验计算机跑多快以及跑多久的问题,记得还有个上限吧,超过就要换算法的,我不记得上限多少去了。

      你提到的我会补充进去,再次感谢。

      • At 2007.05.07 23:20, 棺材中的尘埃 said:

        。。。这里的东西总是这么学术性:)

        • At 2008.03.02 21:10, nicki said:

          哈哈,你没看懂的那个是一段编程语言。

          (Required)
          (Required, not published)

          guest | 注册 | BBS | 管理 | English | 繁體

          阅微堂

          Find her an empty lap, fellas

          Loading...
          Loading...
          Loading...