题目描述:用公式π/4≈1-1/3+1/5-1/7+ 求其近似值,直到发现某一项加数的绝对值小于1e-6为止。
我写了如下图所示的程序来解决这个问题,得到的结果离计算器计算出来的π/4的大小(0.785 )差距很多,请问这是因为什么?float精度的问题吗?还是?
int i=0; //控制循环
float mu=1.0; //分母的值
float present=-1.0; //当前加数
float sum=0.0; //求和
for(i=0;;)
{
if(fabs((float)present)<1e-6)
break;
else
{
present=-(present/mu);
sum+=present;
mu+=2;
}
}
printf("π/4的值为:%f\n",sum);
感谢!
#include <stdio.h>
#include <math.h>
int main()
{
int i=0; //控制循环
float mu=1.0; //分母的值
float present=-1.0; //当前加数
float sum=0.0; //求和
int flag = 1;
for(i=0;;)
{
if(fabs((float)present)<1e-6)
break;
else
{
present=1/mu*flag;
sum+=present;
mu+=2;
flag = -flag;
}
}
printf("π的值为:%f\n",sum*4);
return 0;
}
你用的公式,收敛速度太慢,我算到100项,pi=3.1315929035585537,要换一个公式