|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
编写程序,根据以下公式求π的近似值,要求累加到某项小于1e-6时为止
π/2=1+1/3+(1*2)/(3*5)……(1*...*n)/(3*...*2n+1)
#include <stdio.h>
void main()
{
float sum=1,fz=1,fm=1,t,fztemp=1,fmtemp=3;
fz=fz*fztemp;fm=fm*fmtemp;
t=fz/fm;
while(t>=1e-6)
{
sum+=t;
fztemp++;
fmtemp+=2;
fz=fz*fztemp;
fm=fm*fmtemp;
t=fz/fm;
}
printf("%f",2*sum);
}
用着个代码可以求出来,为什么用下面这个就求不出来呢
#include <stdio.h>
void main()
{
float sum=1,fz=1,fm=1,t,fztemp=1,fmtemp=3;
t=(fz*fztemp)/(fm*fmtemp);
while(t>=1e-6)
{
sum+=t;
fztemp++;
fmtemp+=2;
t=(fz*fztemp)/(fm*fmtemp);
}
printf("%f",2*sum);
}
求大神指教
第二段代码有一个错误,就是你没有更新 fz 和 fm 的值。
在每次循环中,你只是用了 fztemp 和 fmtemp 来乘以原来的 fz 和 fm,但是 fz 和 fm 本身没有变化。
所以,你得到的 t 的值一直都是 0.666667,而不会趋近于 0。
要修正这个错误,你需要在每次循环中把 fz 和 fm 的值也更新为 fz*fztemp 和 fm*fmtemp。
这样才能得到正确的结果。
|
|