Pi squared to n digits C++
我发现了许多相似的话题,但没有一个能给我明确的解释。
我必须编写一个程序,用这个泰勒级数计算π平方到n位数:
π^2=12(1/1^2-1/2^2+1/3^2-1/4^2+…)
我写了这个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <iostream> #include <math.h> using namespace std; int main() { int n; cout <<"How many digits?" << endl; cin >> n; long double Pi2 = 0; int i = 1; while( precision is less than n ) { if ((i%2) == 1) { Pi2 += 1/pow(i,2); i+=1; } else { Pi2 -= 1/pow(i,2); i+=1; } } Pi2 *= 12; cout << Pi2 << endl; return 0; } |
我不知道在while()中写什么?这个循环什么时候停止?
要考虑的方法是使用ndigits创建"epsilon"值。假设ndigits是3。这个数字是0.0001。
如果上一次迭代的值与当前迭代的值之差小于0.0001,则可以假定您拥有之后的值,并终止while循环。
不过是个警告。双精度和长精度双精度对它们能保持的位数有一个上限。
如果知道所需的精度,可以在开始循环之前计算n的最大值的正确值。第二件事:如果你开始添加所有的delta值,从最少的数字开始。
类似于此
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | int ndigits; cout <<"How many digits?" << endl; cin >> ndigits; int n = int( pow( double(10), double(ndigits)/2 ) + 0.5 ); long double Pi2 = 0; int i = 1; for( int i=n; i>0; --i ) { if ((i%2) == 1) { Pi2 += 1/pow(long double(i),2); } else { Pi2 -= 1/pow(long double(i),2); } } Pi2 *= 12; |