高分请教(求pi)
dot99 2001-07-25 12:03:20 我写的一个求pi的程式,请教一下怎么改进:)
循环10次精确到第6位
循环20次精确到第12位
循环10000次耗时 440ms
// pi.cpp
//算法:
//
//三角形的面积之和的极限=圆面积
//圆半径R=1, 弦长C, 弦垂线D
//分n次有2^n个三角形
#include
void
main()
{
const int N = 10000;
const double R = 1;
const double SQRT_2 = 1.4142135623731;
double D0 = 1/SQRT_2;
double C0 = SQRT_2;
double Dn, Cn, Db, Cb, Cb1;
double pi;
for (int i = 1; i <= N; i++) {
Cb = C0/2;
Db = R-D0;
Cn = sqrt(Cb*Cb + Db*Db);
Cb1 = Cn/2;
Dn = sqrt(R - Cb1*Cb1);
C0 = Cn;
D0 = Dn;
//_DEBUG_ pi = (2<<i) * Cn * Dn;
}
//pi = pi = (2<<N) * Cn * Dn; // 1/4圆
}
还请教一下,怎么输出结果?
还有:)请解释一下网易bbs中这个"外星人"的pi程式:) (算到800位)
#include
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);
}