一、源程序 本文分析下面这个很流行的计算PI的小程序。下面这个程序初看起来似乎摸不到头脑,不过不用担心,当你读完本文的时候就能够基本读懂它了。 程序一:很牛的计算Pi的程序 int 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); } 二、数学公式 数学家们研究了数不清的方法来计算PI,这个程序所用的公式如下: 1 2 3 k pi = 2 + --- * (2 + --- * (2 + --- * (2 + ... (2 + ---- * (2 + ... ))...))) 3 5 7 2k+1 至于这个公式为什么能够计算出PI,已经超出了本文的能力范围。 下面要做的事情就是要分析清楚程序是如何实现这个公式的。 我们先来验证一下这个公式: 程序二:Pi公式验证程序 #include "stdio.h" void main() { float pi=2; int i; for(i=100;i>=1;i--) pi=pi*(float)i/(2*i+1)+2; printf("%f\n",pi); getchar(); } 上面这个程序的结果是3.141593。 三、程序展开 在正式分析程序之前,我们需要对程序一进行一下展开。我们可以看出程序一都是使用for循环来完成计算的,这样做虽然可以使得程序短小,但是却很难读懂。根据for循环的运行顺序,我们可以把它展开为如下while循环的程序: 程序三:for转换为while之后的程序 int a=10000,b,c=2800,d,e,f[2801],g; main() { int i; for(i=0;i
(出处:http://www.sheup.com)
上一页 [1] [2]