歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 算法分析---外星人計算PI的程序

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

日期:2017/2/27 9:26:23   编辑:更多Linux
  一、源程序   本文分析下面這個很流行的計算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



Copyright © Linux教程網 All Rights Reserved