4

下面是一些根据 Chudnovsky 算法计算 Pi 的 C++ 代码:

#include <iostream>
#include <cmath>
#include <iomanip>

int fact(int digit)
{
    int result = 1;
    for (int i=digit; i>1; i--)
    {
        result *= i;
    }
    return result;
}

int main()
{
    long double pi = 0.0;
    int precision = 10;
    for ( int k=0; k<=precision; k++)
    {
        pi += ( pow(-1, k)*fact((6*k))*(13591409+545140134*k))/(fact(3*k)*pow(fact(k),3)*pow(640320, (3*k+1.5)));
    }
    pi = 1.0/(12*pi);
    std::cout<<std::setprecision(80)<<pi<<'\n'<<M_PI<<'\n';
}  

问题是这段代码只返回 PI 号的 15 位右数字,另一部分是垃圾......当精度变量设置为 12 或更大时,它返回 -nan。有人可以帮我吗?TIA
编辑:Ubuntu 12.10 x64,gcc 4.7.2

4

1 回答 1

1

使用 double 作为 fact() 返回类型以及 fact() 中的“结果”变量。

于 2013-05-21T21:22:08.900 回答