使用莱布尼兹公式

时间:2016-10-11 22:06:15

标签: c++ for-loop approximation

我是C ++的初学者并编写自己的代码,所以请原谅任何词汇失误。我无法在互联网上找到这个具体的问题,但是我仍然很难找到我需要的结果。

所以我使用Leibniz公式来近似pi:

pi = 4·[1 -1 / 3 + 1 / 5-1 / 7 + 1/9 ... +( - 1 ^ n)/(2n + 1)]。

我写了一个compilable and runnable program,但令我困扰的代码的主要部分是:

if (terms > 0){

        double partial = 0;

        for (i = 0; i < terms; i++)
            if (i % 2 == 0)
                partial -= (pow(-1,terms))/((2.0 * i) + 1);
            else
                partial += (pow(-1,terms))/((2.0 * i) + 1);

        double newPi = 4 * partial;

        cout << "The approximation is " << newPi << " using " << terms << " terms.\n";

}

如果term = 3,则近似值= 2.895

如果term = 10,则近似值= 3.232

如果term = 50,则近似值= 3.161

我没有得到任何这些数字。我注意到,当我输入一个奇数时,我得到一个负数,反之亦然。我在课程中写的所有内容都是我到目前为止在课堂上学到的所有东西,所以我不能超出我写过的范围。任何帮助或解释都会受到赞赏。

2 个答案:

答案 0 :(得分:4)

你有一个if / else来确定标志,但你也做pow(-1, terms)。我会删除pow并将其替换为1,因为您已经在执行partial +=partial -=,具体取决于i是奇数还是偶数。另外,我认为您的+=-=应该是相反的方式。

答案 1 :(得分:0)

试试这个:

if (terms > 0){
     double partial = 0;
     for (i = 0; i <= terms; i++)
         partial += pow(-1,i)/(2.0 * i + 1);
     double newPi = 4 * partial;
     cout << "The approximation is " << newPi << " using " << terms << " terms.\n";
}