c语言求PI值,使其精度小于0.005,为什么运行不到结果啊,#include #include double fun ( double eps){int i=1,s=1,t=1;double j,sum=1.0;while(j>=eps){t=t*i;s=s*(2*i+1);j=1.0*t/s;sum=sum+j;i++;}return sum*2;}main( ){ double x;void NONO ();p
来源:学生作业帮助网 编辑:六六作业网 时间:2024/10/06 09:54:02
c语言求PI值,使其精度小于0.005,为什么运行不到结果啊,#include #include double fun ( double eps){int i=1,s=1,t=1;double j,sum=1.0;while(j>=eps){t=t*i;s=s*(2*i+1);j=1.0*t/s;sum=sum+j;i++;}return sum*2;}main( ){ double x;void NONO ();p
c语言求PI值,使其精度小于0.005,为什么运行不到结果啊,
#include
#include
double fun ( double eps)
{int i=1,s=1,t=1;
double j,sum=1.0;
while(j>=eps)
{
t=t*i;
s=s*(2*i+1);
j=1.0*t/s;
sum=sum+j;
i++;
}
return sum*2;
}
main( )
{ double x;void NONO ();
printf("Input eps:") ;
scanf("%lf",&x); printf("\neps = %lf,PI=%lf\n",x,fun(x));
NONO();
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件.*/
FILE *fp,*wf ;
int i ;
double x ;
fp = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(fp,"%lf",&x) ;
fprintf(wf,"%lf\n",fun(x)) ;
}
fclose(fp) ;
fclose(wf) ;
}
这是原题
c语言求PI值,使其精度小于0.005,为什么运行不到结果啊,#include #include double fun ( double eps){int i=1,s=1,t=1;double j,sum=1.0;while(j>=eps){t=t*i;s=s*(2*i+1);j=1.0*t/s;sum=sum+j;i++;}return sum*2;}main( ){ double x;void NONO ();p
帮你研究了下 问题有两点
一 、while(j>=eps) 这句话的时候 j没初始化没有被赋值 怎么比啊?
建议改一下:
while(j>=eps)
{
t=t*i;
s=s*(2*i+1);
j=1.0*t/s;
sum=sum+j;
i++;
}
return sum*2;
}
改成 do while
do
{
t=t*i;
s=s*(2*i+1);
j=1.0*t/s;
sum=sum+j;
i++;
}
return sum*2;
}while(j>=eps);
二、本程序当输入的精度 很精时 ,会发生溢出 当然这时候系统不会提示你溢出 而回运行得到错误的结果 即 你说的 不会的3.14..啊好像是3.09..
s=s*(2*i+1); //s 发生溢出了
故修改成:int i=1,s=1,t=1;------》double i=1,s=1,t=1; 这样就不会溢出了 ,随着精度的精确 越来越接近3.1415926
你可以试一下
好的话
请采纳