使用莱布尼茨公式的 C++ Pi 近似

C++ Pi Approximation using Leibniz Formula

我是 C++ 的初学者,并且自己编码,所以请原谅任何词汇错误。我找不到这个具体的问题,但在互联网上找到了类似的问题,但我仍然很难得到我需要的结果。

所以我使用莱布尼茨公式来近似圆周率,即:

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";

}

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

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

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

我没有收到任何这些数字。不过我注意到,当我输入奇数时,我得到负数,反之亦然。我在我的程序中编写的所有内容都是我迄今为止在 class 中学到的所有内容,因此我不能真正超出我编写的范围。任何帮助或解释将不胜感激。

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

试试这个:

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";
}

您可以通过在循环之间使用变量保持符号条件来避免在每个循环中计算 pow(-1,i)

if (terms > 0){
    double newPi = 0.0;
        for (int i=0; i < n; ++i) { 
            newPi += sign / (2.0 * i + 1.0);
            sign  = -sign; 
        }
        newPi *= 4;
        cout << "The approximation is " << newPi << " using " << terms << " terms.\n";
}