1、圆周率的计算方法古人计算圆周率,一般是用割圆法。即用圆的内接或外切正多边形来逼近圆的周长。Archimedes 用正 96 边形得到圆周率小数点后 3 位的精度;刘徽用正 3072 边形得到 5 位精度;Ludolph Van Ceulen 用正 262 边形得到了 35 位精度。这种基于几何的算法计算量大,速度慢,吃力不讨好。随着数学的发展,数学家们在进行数学研究时有意无意地发现了许多计算圆周率的公式。下面挑选一些经典的常用公式加以介绍。除了这些经典公式外,还有很多其他公式和由这些经典公式衍生出来的公式,就不一一列举了。 Machin 公式 这个公式由英国天文学教授 John Machin
2、于 1706 年发现。他利用这个公式计算到了 100 位的圆周率。Machin 公式每计算一项可以得到 1.4 位的十进制精度。因为它的计算过程中被乘数和被除数都不大于长整数,所以可以很容易地在计算机上编程实现。Machin.c 源程序 还有很多类似于 Machin 公式的反正切公式。在所有这些公式中,Machin 公式似乎是最快的了。虽然如此,如果要计算更多的位数,比如几千万位,Machin 公式就力不从心了。下面介绍的算法,在 PC机上计算大约一天时间,就可以得到圆周率的过亿位的精度。这些算法用程序实现起来比较复杂。因为计算过程中涉及两个大数的乘除运算,要用 FFT(Fast Fourie
3、r Transform)算法。FFT 可以将两个大数的乘除运算时间由 O(n2)缩短为 O(nlog(n)。关于 FFT 算法的具体实现和源程序,请参考 Xavier Gourdon 的主页 Ramanujan 公式 1914 年,印度数学家 Srinivasa Ramanujan 在他的论文里发表了一系列共 14 条圆周率的计算公式,这是其中之一。这个公式每计算一项可以得到 8 位的十进制精度。1985 年 Gosper 用这个公式计算到了圆周率的 17,500,000 位。1989 年,David & Gregory Chudnovsky 兄弟将 Ramanujan 公式改良成为:这个公式
4、被称为 Chudnovsky 公式,每计算一项可以得到 15 位的十进制精度。1994 年 Chudnovsky 兄弟利用这个公式计算到了 4,044,000,000 位。Chudnovsky 公式的另一个更方便于计算机编程的形式是:AGM(Arithmetic-Geometric Mean)算法 Gauss-Legendre 公式:初值:重复计算:最后计算:这个公式每迭代一次将得到双倍的十进制精度,比如要计算 100 万位,迭代 20 次就够了。1999 年9 月 Takahashi 和 Kanada 用这个算法计算到了圆周率的 206,158,430,000 位,创出新的世界纪录。Borwein 四次迭代式:初值:重复计算:最后计算:这个公式由 Jonathan Borwein 和 Peter Borwein 于 1985 年发表,它四次收敛于圆周率。 Bailey-Borwein-Plouffe 算法 这个公式简称 BBP 公式,由 David Bailey, Peter Borwein 和 Simon Plouffe 于 1995 年共同发表。它打破了传统的圆周率的算法,可以计算圆周率的任意第 n 位,而不用计算前面的 n-1 位。这为圆周率的分布式计算提供了可行性。1997 年,Fabrice Bellard 找到了一个比 BBP 快 40的公式: