嵌套在循环中的公式将无法正确执行

时间:2017-09-19 20:37:19

标签: c while-loop

我正在尝试解决运行此系列的代码pi = 4 - 4/3 + 4/5 - 4/7 + 4/9 ......等等。问题是,当我运行更高的值时,函数趋向于4,而不是3,1415 ....程序似乎只运行n假设的最大值。我也不能使%%。lflf根据变量设置小数,(p)。该算法似乎是正确的,但几天后我急切希望得到任何帮助,非常感谢。

if ( 2 == route ) {
    printf("piseries calculator\n");

    double pi,n,p;

    printf("define precision");
    scanf("%lf",&p);

    n=0;

    while (n++ <= p ) {
        pi = (4) - (n * ( 4 / ( 1 + 2 *(n)))) +( n * ( 4 / ( 3 + 2 * (n))));
    }
    printf("%%.lflf",p,pi);
    return 0;
}

2 个答案:

答案 0 :(得分:0)

我会对这些计算进行缩放

#include <stdio.h>

#define Niterations 1000
#define SCALE 1000

int main(void) {

    double pi = 4.0 * SCALE;
    for(unsigned i = 0; i < Niterations; i ++)
    {
        double f = 4.0 * SCALE / (3 + i * 2);
        pi += (i & 1) ? f : -f;
    }

    printf("N iterations = %u, pi = %lf", Niterations, pi / SCALE);
    // your code goes here
    return 0;
}

测试https://ideone.com/mSZNyg

结果:N iterations = 10000, pi = 3.141692643590519029572760700830258429050445556640625000000000 ...

答案 1 :(得分:0)

首先,制作n和p整数。

其次n从3开始不是吗?

第三个Pi系列是4.0( - 分数+分数)......

最后,你可以使用%。* lf来增加/限制输出的精度。

 if ( 2 == route )
 {
    printf("piseries calculator\n");

    double pi=4.0;
    int n,p;

    printf("define precision");
    scanf("%d",&p);

    for(n=3;n<p;n+=2)
    {
        pi -= 4.0/n;
        n+=2;
        pi += 4.0/n;
    }
    printf("%.*lf",p,pi);
    return 0;
}