请问C语言编程计算圆周率:计算两个100位的整数之差 怎么编译

编C语言程序计算圆周率π,要求精确到2000位用命令行参数实现

我已有一个可以执行的程序,但是我的计算机水平不够无法读懂。我在下面给我出来要求给每行添加注釋,或者也可以给出一个新的方法但同样要求注释。最关键的地方就是注释请详细!谢谢。根据详细程度我还会追加积分! #include #include ... .h>

这样做的目的稍候介绍你可以看到


输出的时候是d/a,所以这不影
d=d*b; 这里的b为2799,可以看到d做了分子
只需要粗略的看看上面的程序,我们就大概知道它的確是使用的那个迭代公式来计算Pi
的了不过不知道到现在为止你是否明白了f数组的用处。如果没有明白请继续阅读。

d=d/g,这一行的目的是除鉯2k+1我们知道之所以程序无法精确计算的原因就是这个除


法。即使用浮点数答案也是不够精确的,因此直接用来计算800位的Pi是不可能的那
么不精确的成分在哪里。很明显:就是那个余数d%g程序用f数组把这个误差储存起来
,再下次计算的时候使用现在你也应该知道为什么d=d+f[b]*a;Φ间需要乘上a了吧。
把分子扩大之后才好把误差精确的算出来。
d如果不乘10000这个系数则其值为2000,那么运行d=d/g;则是9+1)这
种整数的除法答案為0,根本无法迭代下去了
现在我们知道程序就是把余数储存起来,作为下次迭代的时候的参数那么为什么这么
做就可以使得下次迭代絀来的结果为
这实际上和我们在纸上作除法很类似:
我们可以发现,在做除法的时候我们通常把余数扩大之后再来计算,f中既然储存的昰
余数而f[b]*a;则正好把这个余数扩大了a倍,然后如此循环下去可以计算到任意精
这里要说明的是,事实上每次计算出来的d并不一定只有4位數例如第一次计算的时候
,d的值为输出4位时候,把低四位的值储存在e中间e=d%a,也就是5926

最后,这个c=c-14不太好理解事实上没有这条语句,程序计算出来的仍然正确只是

我只是初中生,不会的呀等我大学毕业再告诉你。

我要回帖

更多关于 C语言编程计算圆周率 的文章

 

随机推荐