zxp学长告诉我两种计算pi值得办法,第一种是pi/4=1-1/3+1/5-1/7……(课本上的传统方法)
第二种方法是
(以上由zxp学长找的资料给我的……)
用C++写出这两种方法求解pi的过程,然后比较这两种方法收敛的速度
#include<iostream>
#include<iomanip>
#include<math.h>
using namespace std;
int main(){
double pi1=0;
double pi2;
for(double i=0;i<1500000;i++){//the method in text book should use more than a million times
pi1=pi1+(1/(2*i+1))*((int)i%2?-1:(1));
}
pi1=pi1*4;
double t=sqrt(2);
double d=2;
double m=t;
for(int i=0;i<100;++i){
pi2=(d)/m;
t=sqrt(2+t);
m*=t;
d*=2;
}//the method zxp give me use less than a thousand times;
cout<<setiosflags(ios::fixed)<<setprecision(10)<<pi1<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(10)<<pi2*2<<endl;
return 0;
}
从计算的结果来看,用第一种加减的方法,计算到了10000次以后,最多也只能精确到小数点后4位之前,而且结果还不正确。直到计算到百万次以后,结果才比较令人满意(还是不算很精确)
运用第二种方法,在100次计算以内,就能精确到小数点后20位以后。