乔治爱啃脚趾 发表于 2023-10-8 12:13:18

c语言求pi

编程计算π的近似值。要求:采用公式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);
}

isdkz 发表于 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。
页: [1]
查看完整版本: c语言求pi