鱼C论坛

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

[已解决]c语言求pi

[复制链接]
发表于 2023-10-8 12:13:18 | 显示全部楼层 |阅读模式

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

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

x
编程计算π的近似值。要求:采用公式p2/6 = 1/12 + 1/22 + 1/32 + … 实现,直到最后一项小于10-12。(定义double类型的变量)
答案为3.141572,但是我的答案是3.141592,请各位帮忙看看是哪里出了问题
#include<stdio.h>
#include<math.h>
int main()
{
        double n=1.00,x=0.00,pi;
        while(1.00/((n+1)*(n+1))>=1e-12)
        {
                
                        x+=1.00/(n*n);
                        n++;
        }
        pi=sqrt(6.00*x);
        printf("pi = %.6lf\n",pi);
}
最佳答案
2023-10-8 12:14:03
你的代码基本上是正确的,但是有一个小错误导致了结果的不准确。在while循环中,你使用的是1.00/((n+1)*(n+1))作为判断条件,这个条件是判断最后一项是否小于10的负12次方。然而,根据题目要求,应该是判断最后一项的绝对值是否小于10的负12次方。

要修正这个问题,你可以将判断条件修改为fabs(1.00/(n*n)) >= 1e-12。这样,就可以正确判断最后一项的绝对值是否小于10的负12次方。修改后的代码如下:
#include<stdio.h>
#include<math.h>

int main()
{
    double n = 1.00, x = 0.00, pi;
    while (fabs(1.00 / (n * n)) >= 1e-12)
    {
        x += 1.00 / (n * n);
        n++;
    }
    pi = sqrt(6.00 * x);
    printf("pi = %.6lf\n", pi);
}

修改后的代码应该可以得到正确的结果3.141592。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-8 12:14:03 | 显示全部楼层    本楼为最佳答案   
你的代码基本上是正确的,但是有一个小错误导致了结果的不准确。在while循环中,你使用的是1.00/((n+1)*(n+1))作为判断条件,这个条件是判断最后一项是否小于10的负12次方。然而,根据题目要求,应该是判断最后一项的绝对值是否小于10的负12次方。

要修正这个问题,你可以将判断条件修改为fabs(1.00/(n*n)) >= 1e-12。这样,就可以正确判断最后一项的绝对值是否小于10的负12次方。修改后的代码如下:
#include<stdio.h>
#include<math.h>

int main()
{
    double n = 1.00, x = 0.00, pi;
    while (fabs(1.00 / (n * n)) >= 1e-12)
    {
        x += 1.00 / (n * n);
        n++;
    }
    pi = sqrt(6.00 * x);
    printf("pi = %.6lf\n", pi);
}

修改后的代码应该可以得到正确的结果3.141592。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 23:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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