cambaluc的个人博客分享 http://blog.sciencenet.cn/u/cambaluc

博文

一段精确计算π的C程序

已有 1414 次阅读 2020-5-31 21:53 |个人分类:c|系统分类:教学心得| 计算圆周率, 编译器

很多年前,大概二十多年前,在一本杂志上看到一段计算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++编译器。

下图,绿色下划线为计算公式,蓝色框内为此公式的普通计算方法,红色框内为精确计算方法,做运算是用了精确除法,就像我们手工计算除式一样。

image.png

普通计算运行结果:

pi=3.141592653589793

精确计算运行结果:

31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185




http://blog.sciencenet.cn/blog-797552-1235829.html

上一篇:开到荼蘼花事了
下一篇:孔子说:系好安全带

2 王林平 李毅伟

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2020-7-6 21:25

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部