用c语言实现级数求和法计算圆周率
级数求圆周率,则是将圆周率写成一个函数表达式,然后把这个函数写成无穷级数的形式,计算无穷级数前n项的部分和,从而对圆周率进行估计。
1.变量说明
变量pi:保存л值
变量i:循环变量
变量t:标记符号,用于记录多项式的符号
变量r:表示多项式的项
变量s:累计部分和
2.程序代码
double arctan(double t){
int i;
double s=0;
double r=t;
for(i=1;i<100000000;i+=2)
{
s+=r/i;
if(fabs(r/i)<1e-16)
{
break;
}
r*=-t*t;
}
printf("迭代:i= %d\n",i);
return s;
}
int main(){
printf("计算方法一:\n");
double pi=4*arctan(1.0);
//printf("计算方法二:\n");
//double pi=8*arctan(1.0/3)+4*arctan(1.0/7);
printf("近似值:%.15f\n",pi);
printf("精确值:%.15f\n",M_PI);
return 0;
}
3.运行结果
方法一
运行结果,如图所示:
分析:循环1亿次,精确度只准确到小数点后7位,效率较低
方法二
运行结果,如图所示:
分析:循环31次,精确度准确到小数点后15位,效率较高
4.结论
泰勒求和方法的收敛速度很慢,n每增加一个数量级,精确度大概提升1位,n 增加到 1000000 时才能精确到小数点后5位,效率过低。