为什么会收敛到3而不是pi?

时间:2019-04-03 19:06:05

标签: c++ pi

我试图用C ++编写一个程序,该程序可以使用Nilakantha系列计算pi。我查看了其他程序,但它们似乎使用相同的方法,但不适用于我的程序。我也使用Gregory-Leibniz系列进行了尝试,但这导致了类似的问题。总和收敛到3而不是pi。我是否正确实施了Series,或者程序总体上有问题?

#include <iostream>
#include <math.h>
#include<bits/stdc++.h>
//variables
float sign = -1.0;
float sum = 0.0;
float start = 3.0;
int iteration = 0.0;

int main() {

    std::cout << "How many iterations should be completed?" << std::endl;
    std::cin >> iteration;
//code for calculating pi
    for (int j = 1; j < iteration; j++) {
        sum = sum + sign * 4.0 / ((2 * iteration) * (2 * iteration + 1.0) * (2 * iteration + 2.0));
        sign *= -1.0;
    }
// output    
    std::cout << std::fixed << std::setprecision(100) << sum + start << std::endl;

    return 0;
}

因此,对于相对较高的迭代次数,输出为3,但应收敛到pi。

2 个答案:

答案 0 :(得分:2)

该行:

sum = sum + sign * 4.0 / ((2 * iteration) * (2 * iteration + 1.0) * (2 * iteration + 2.0));

永远不会随着不同的迭代而变化,您只是在前后相减相加。您需要将iteration替换为j

sum = sum + sign * 4.0 / ((2 * j) * (2 * j+ 1.0) * (2 * j+ 2.0));

答案 1 :(得分:0)

for (int j = 1; j < iteration; j++) 对于起始值iteration = 0.0

,永远不会执行循环