用Chudnovsky算法计算圆周率

Calculating Pi number with Chudnovsky algorithm

本文关键字:圆周率 计算 算法 Chudnovsky      更新时间:2023-10-16

因此,这里有一些C++代码,用于根据Chudnovsky算法计算Pi:

#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

使用双精度表示fact()返回类型以及act()内部的"result"变量。