首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

帮小弟我看看为什么这两个程序的结果不同

2013-03-25 
帮我看看为什么这两个程序的结果不同#include stdio.hdoublefun ( doubleeps){double s1.0,c1.0int n

帮我看看为什么这两个程序的结果不同


#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
[解决办法]
这个只是浮点型运算的问题,理论上一样的

热点排行