黑猫123 发表于 2023-3-6 14:41:39

求π的近似值问题

编写程序,根据以下公式求π的近似值,要求累加到某项小于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);
}
求大神指教{:10_266:}

isdkz 发表于 2023-3-6 15:03:08

第二段代码有一个错误,就是你没有更新 fz 和 fm 的值。

在每次循环中,你只是用了 fztemp 和 fmtemp 来乘以原来的 fz 和 fm,但是 fz 和 fm 本身没有变化。

所以,你得到的 t 的值一直都是 0.666667,而不会趋近于 0。

要修正这个错误,你需要在每次循环中把 fz 和 fm 的值也更新为 fz*fztemp 和 fm*fmtemp。

这样才能得到正确的结果。
页: [1]
查看完整版本: 求π的近似值问题