帮我看看为什么这两个程序的结果不同
#include <stdio.h>
double fun ( double eps)
{
double s=1.0,c=1.0;
int nu=1/*作为分子*/,de=1/*作为分母*/,n;
for(n=1;c>=eps;n++)
{
nu*=n;
de*=(2*n+1);
c=1.0*nu/de;
s+=c;
}
return 2*s;
}
main( )
{ double x;
printf("Input eps:") ;
scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x));
}
*************************************
#include <stdio.h>
double fun ( double eps)
{
double s=1.0,s1=1.0;
int n=1;
while(s1>=eps)
{s1=s1*n/(2*n+1);
s=s+s1;
n++;
}
return 2*s;
}
main( )
{ double x;
printf("Input eps:") ;
scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x));
}
**********************************
是以公式
π/2=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+(1*2*3*4)/(3*5*7*9)+……+(1*2*3*4*……*n)/(3*5*……*(2n+1))
来求π值。
输入精度0.0005,第一个是3.09多,第二个是3.14多,当然第一个有问题,可是问题在哪呢?
c
[解决办法]
这个只是浮点型运算的问题,理论上一样的