求个圆周率的公式
圆周率精确计算的数学公式是什么?
如果位数超过了long long的最大值,该怎么办?
[解决办法]
1、马青公式
π=16arctan1/5-4arctan1/239
这个公式由英国天文学教授约翰·马青于1706年发现。他利用这个公式计算到了100位的圆周率。马青公式每计算一项可以得到1.4位的十进制精度。因为它的计算过程中被乘数和被除数都不大于长整数,所以可以很容易地在计算机上编程实现。
还有很多类似于马青公式的反正切公式。在所有这些公式中,马青公式似乎是最快的了。虽然如此,如果要计算更多的位数,比如几千万位,马青公式就力不从心了。
2、拉马努金公式
1914年,印度天才数学家拉马努金在他的论文里发表了一系列共14条圆周率的计算公式。这个公式每计算一项可以得到8位的十进制精度。1985年Gosper用这个公式计算到了圆周率的17,500,000位。
1989年,大卫·丘德诺夫斯基和格雷高里·丘德诺夫斯基兄弟将拉马努金公式改良,这个公式被称为丘德诺夫斯基公式,每计算一项可以得到15位的十进制精度。1994年丘德诺夫斯基兄弟利用这个公式计算到了4,044,000,000位。丘德诺夫斯基公式的另一个更方便于计算机编程的形式是:
3、AGM(Arithmetic-Geometric Mean)算法
高斯-勒让德公式:
圆周率这个公式每迭代一次将得到双倍的十进制精度,比如要计算100万位,迭代20次就够了。1999年9月,日本的高桥大介和金田康正用这个算法计算到了圆周率的206,158,430,000位,创出新的世界纪录。
4、波尔文四次迭代式:
这个公式由乔纳森·波尔文和彼得·波尔文于1985年发表的。
5、bailey-borwein-plouffe算法
6.丘德诺夫斯基公式
7.莱布尼茨公式圆周率的计算如下:在圆中画等边的多边形来实现,划分越多越接近圆周率,设圆半径为a
1)等边三角形,圆心到三个顶点的距离是一样的,三角形的面积为3√3/4*a^2=1.332a^2
2)正方形,面积为2a^2
3)等边五角形,面积为2.377a^2
4)等边六角形,面积为3√3/2a=2.598a^2
从数值可以看到变化趋势:1.332,2,2.377,2.598....越来越接近3.141592654...
老祖宗祖冲之就是靠多边形这样计算出来的,只不过他比我们困难,因为那时不能使用三角函数表,还需要自己去计算。我们要得到小数点后超过4位的准确数字,我们也只有自己计算,因为三角函数表就4位有效数字。
....这样一直计算下去,其结果将越来越接近π(圆周率),为计算方便,可以从正方形到八边形
[解决办法]
- C/C++ code
#include <stdio.h>long a=10000;long b;long c=2800;long d;long e;long f[2801];long g;int main() { for(;b-c;) f[b++]=a/5;// while (1) {// if (0==b-c) break;// f[b]=a/5;// b++;// } //f[0 - 2800] = 10000/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);// while (1) {// d=0;// g=c*2;// if (0==g) break;// c-=14;// printf("%.4d",e+d/a);// e=d%a;// b=c;// while (1) {// d+=f[b]*a;// f[b]=d%--g;// d/=g--;// --b;// if (0==b) break;// d*=b;// }// } return 0;}
[解决办法]
π=180°sinθθ
(θ→0°.θ>0°) /
[解决办法]
Pi/4 = 1/1 - 1/3 + 1/5 - 1/7 + 1/9...
Pi/4 = 4 * arctan( 1/5 ) - arctan( 1/239 )