美文网首页π 的故事
解密那一段神奇的计算圆周率的程序(一)

解密那一段神奇的计算圆周率的程序(一)

作者: aubell | 来源:发表于2017-05-25 11:54 被阅读273次

网络上广为流传的一段程序,计算圆周率的程序,看起来是这样的:

#include<stdio.h>
//2015.8.12
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);
}

我把它重新写过:

#include   "stdio.h"

int a=10000, bit, cur=2800, sum, rem, fill[2801], q;

void cal_to_next(){
  sum += fill[bit]*a;
  --q;
  fill[bit] = sum % q;
  sum /=q;
  --q;
  --bit;
}

main()   
{   
  while(bit-cur){    
    fill[bit++]=a/5;  
  }

  do{
    sum=0;
    q=cur*2;
    bit = cur;
    cal_to_next();    
     
    while(bit){  
      sum *= bit;
      cal_to_next();
    };
    
    printf("%.4d",rem + sum/a);
    
    rem  = sum % a;
    cur  = cur-14;    
  } while(cur);
return 0;   
}  

这样应该好懂了。如果还是不明白,那么,lisp版本就是这样的:


(defun frac-pi(n)
  (do ((s 0 (+ s v))
       (a 1 (+ a 1))
       (v 2 (* v (/ a b)))
       (b 3 (+ b 2)))
      ((= a n) s)))

如果还是不明白,那么,excel版本应该是这样的:

ppi.png

其中,唯一的公式是 D3=D2*C3,向下复制。D列所有数字的和就是要求的圆周率的近似值。

学数学的人是这样写的:


pi.png

(虽然数学符号很混乱的说,但果然看起来紧凑,比lisp看起来还要紧凑。)
这么多解释了,你一定能看懂这个公式了。
那么,这个公式是如何推导出来的呢?且听下回分解。

相关文章

网友评论

    本文标题:解密那一段神奇的计算圆周率的程序(一)

    本文链接:https://www.haomeiwen.com/subject/iagaxxtx.html