Pi平方到n位C ++

时间:2014-03-15 12:12:12

标签: c++ pi

我发现了许多相似的主题,但没有一个给我明确的解释。

我必须编写程序,使用这个泰勒系列计算Pi平方到n位:

π^ 2 = 12(1/1 ^ 2 - 1/2 ^ 2 + 1/3 ^ 2 - 1/4 ^ 2 + ...)

我写了这个:

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

我不知道在()中写什么?这个循环何时停止?

2 个答案:

答案 0 :(得分:0)

如果您知道所需的精度,则可以在开始循环之前计算n的最大值的正确值。 第二件事:如果您开始添加所有delta值,请从最少的数字开始。

与此相似

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;

答案 1 :(得分:0)

要考虑的方法是使用 ndigits 来创建一个&#39; epsilon&#39;值。
我们假设ndigits是3.这给出了0.0001的epsilon

如果上一次迭代的值与当前迭代之间的差值小于0.0001,那么您可以假设您拥有了之后的值,并终止了while循环。

虽然有警告。双打和长双打有准确保​​持的位数上限。