主题:一个很牛的计算pi的c程序
yaozheng
[专家分:28410] 发布于 2003-08-18 22:46:00
#include <stdlib.h>
#include <stdio.h>
long a=10000,b,c=2800,d,e,f[2801],g;
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);
}
计算结果:
31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185
回复列表 (共115个回复)
51 楼
fankaicn [专家分:180] 发布于 2005-01-27 20:17:00
虽然作者有点故弄玄虚,但确实不能不承认他很牛
注意到for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b)中,有d/g--和d*=b两句,其实g=2*b-1,可以确定用的公式是pi/2=1+1/3+1/3*2/5+……
大家可以只运行一下for(b=2800;d+=f[b]*a,f[b]=d%(2*b-1),d/=(2*b-1),--b;d*=b)即相当于第一次循环,再看看d的值,就能理解那个公式的运用了。
每一次外层循环都得到一个d值,除以a后再将其输出。a的作用相当与将其截断,然后先将其前四位输出,后面的内容先存着以后再用。
作者的厉害之处在与利用某种精妙的原理,可以充分的存储信息,然后一步一步将精度踢高。这就是外层循环的作用,现在还没想出其机理。
先说到这,继续think ……
52 楼
我是雄伟 [专家分:0] 发布于 2005-01-27 23:21:00
上面解释这么清楚,也很N哦~呵呵。。
53 楼
taotao1981 [专家分:0] 发布于 2005-04-06 07:52:00
shuai ge,的确编的不错,能不能修改一下呀!
在3的后面再加的小数点".",就更加完美了,希望楼主答复呀!!
期待佳音~~~~~~~~
54 楼
taotao1981 [专家分:0] 发布于 2005-04-06 07:53:00
好啊
55 楼
童蒙 [专家分:140] 发布于 2005-04-06 17:06:00
能编译通过吗?得have a try!
56 楼
lingzantia [专家分:20] 发布于 2005-04-06 18:58:00
算法不明白
57 楼
liuyishao [专家分:280] 发布于 2005-04-06 20:30:00
不可思意
58 楼
rickone [专家分:15390] 发布于 2005-04-08 16:43:00
全局变量和静态局部变量的数据是存在data区的,未初始化就为0,只有函数内部的局部变量(auto)存于stack区,不初始化为一不确定数值。
59 楼
木林 [专家分:90] 发布于 2005-04-10 16:16:00
变量不赋值…………
PS:可以肯定的是前30位肯定正确,我背过。
60 楼
aleck555555 [专家分:290] 发布于 2005-04-10 18:20:00
非常艺术的 程序!!
只能用艺术来形容了。。。。。。。。。。。。
我来回复