我试图用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。
答案 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