Pi平方到n位C ++

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;