当前位置:Linux教程 - Linux资讯 - 算法分析---外星人计算PI的程序

算法分析---外星人计算PI的程序

  一、源程序   本文分析下面这个很流行的计算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]