C -Chudnovsky算法产生-Nan



我正在尝试实现用于计算pi的chudnovsky算法。

这是我的实现:

int fact(int n)
{
    if(n<=1)
        return 1;
    else
        return fact(n-1)*n;
}
double calcPi(long n)
{
    double z=0;
    for(int k=0; k<n; k++)
    {
        z+=(pow(-1, k)*fact(6*k)*(13591409 + 545140134.0*k))/(fact(3*k)*pow(fact(k), 3)*pow(640320.0, 3.0*k+3.0/2));
    }
    z*=12;
    return 1/z;
}

我遇到了一个很小的错误。当我插入大于12的N值时,我会得到-NAN。我猜这与有限的精度,某种整数溢出或我绝对可怕的阶乘实现有关(是的,我很懒惰并且使用了递归。这是凌晨2点)。

无论如何,如果您以前经历过并建议快速修复,那就不错。

也许我应该只使用python,而不再担心溢出。

快乐(几乎)新年!

浮点算术不是很琐碎的,考虑到您的问题,我更喜欢用一些提示回答您的问题。

您可以使用GMP或MPFR等库来解决此问题,这是两者的不错的常见问题。

如果您真的想掌握此内容,几乎每种主要的编程语言,则绝对应该从阅读IEEE 754。

最新更新