很多年前,大概二十多年前,在一本杂志上看到一段计算pai的程序。这段程序似乎是讽刺了C语言的可读性差,自由灵活到晦涩难懂,但编写的确实巧妙。仅用四行就计算了800位圆周率的精确值。
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("%.4ld",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);scanf("%s");}
每次测试C语言编译器我都用这段程序,从turboC2.0开始,这学期指导毕业设计,因为要用C语言绘图,学生机器的操作系统版本高,装不上VC6.0,只好在云主机上装VS2019,但试用版只能用一个月,所占空间也太大,只好卸载。唉,操作系统、编译器,这些卡脖子的技术,人家一升级一换代,就得跟着改。昨天又装了wxDev C++编译器。
下图,绿色下划线为计算公式,蓝色框内为此公式的普通计算方法,红色框内为精确计算方法,做运算是用了精确除法,就像我们手工计算除式一样。
普通计算运行结果:
pi=3.141592653589793
精确计算运行结果:
31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185: