鱼C论坛

 找回密码
 立即注册
查看: 1786|回复: 1

[已解决]求π的近似值问题

[复制链接]
发表于 2023-3-6 14:41:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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);
}
求大神指教
最佳答案
2023-3-6 15:03:08
第二段代码有一个错误,就是你没有更新 fz 和 fm 的值。

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

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

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

这样才能得到正确的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-6 15:03:08 | 显示全部楼层    本楼为最佳答案   
第二段代码有一个错误,就是你没有更新 fz 和 fm 的值。

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

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

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

这样才能得到正确的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 21:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表