问题标题:
编写函数fun,其功能是:根据以下公式求π的值(要求精度0.0005,即某项小于0.0005时停止迭代)请编写函数fun,其功能是根据以下公式求π的值(要求满足精度0.0005,即某项小于0.0005时停止迭代).π/2=
问题描述:
编写函数fun,其功能是:根据以下公式求π的值(要求精度0.0005,即某项小于0.0005时停止迭代)
请编写函数fun,其功能是根据以下公式求π的值(要求满足精度0.0005,即某项小于0.0005时停止迭代).
π/2=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+……+(1*2*3*4*……*n)/(3*5*7*……*(2n+1))
程序运行后,若输入精度为0.0005,则输出为3.1416
doublefun(doubleeps)
{doubles,x;intn;
x=1.0;s=0.;n=1;
while(x>0.0005)
{s=s+x;x=x*n/(2n+1);n++;}
x05return2s;
}
main()
{doublex;voidNONO();
printf("Inputeps:");
scanf("%lf",&x);printf("neps=%lf,PI=%lfn",x,fun(x));
NONO();
}
这个程序说有一个错误.求教大神在哪里?
邓九英回答:
无论是你的答案还是正确答案都有问题
你的答案问题在于自变量i设置成了double型
浮点型做自加操作的时候可能导致死循环的也就是你的程序如果精度设置的特别高会出问题
所谓的正确答案,没有这个问题但是不符题意
即某项小于0.0005时停止迭代
正确答案中是某项小于精度后把该项累加并在下一项停止迭代
下面是把你的程序改成了完全符合“正确答案”的代码
PS:题目中也有一个错误当精度为0.0005时输出的是3.141106即保留四位小数位3.1411
要想输出3.1416最低精度为0.00002
#includedoublefun(doubleeps){doublepi=1,a=1;x09inti;for(i=1;a>=eps;i++){a=a*i/(2*i+1);pi=pi+a;}return2*pi;}main(){doublex;printf("Inputeps:");scanf("%lf",&x);printf("neps=%lf,PI=%.4lfn",x,fun(x));//输出4位小数}
查看更多
八字精批
八字合婚
八字起名
八字财运
2024运势
测终身运
姓名详批
结婚吉日