注册 登录
编程论坛 C语言论坛

计算pi

三尺冰 发布于 2019-11-20 20:20, 1583 次点击

利用公式π/4 = 1-1/3+1/5-1/7……计算π,直到最后一项的绝对值小于10的负6次方为止

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main()
{
    int n = 1;
    int sign = 1;
    double pi = 0;
    double eps = 1.0 / n;    //最后一项

    while(fabs(eps) >= 1e-6)
    {
        pi += sign * eps;
        n += 2;
        sign *= -1;
        eps = sign * 1.0 / n;
    }
    pi *= 4;
    printf("pi = %.4f\n", pi);


    return 0;
}

请问问题出在哪,我的结果是pi = 30.1717

3 回复
#2
纯蓝之刃2019-11-20 21:22
eps = sign * 1.0 / n;
错了
应该是eps = 1.0 / n;
#3
三尺冰2019-11-20 22:08
,,,,,一时眼花, 感谢!!!
#4
rjsp2019-11-21 09:14
直到最后一项的绝对值小于10的负6次方为止
这是不是说 最后一项 是小于10^-6的,它本身也应该被累加到pi中去?

程序代码:
#include <stdio.h>

int main( void )
{
    // 1-1/3+1/5-1/7……

    {
        double pi = 0;
        for( unsigned i=1; i<=1000000; i+=2 )
            pi += (2.0-i%4)/i;
        pi *= 4;
        printf( "pi = %f\n", pi ); // 3.141591
    }

    {
        double pi = 0;
        for( unsigned i=1; i<=1000001; i+=2 )
            pi += (2.0-i%4)/i;
        pi *= 4;
        printf( "pi = %f\n", pi ); // 3.141595
    }
}

1