我正在尝试实现用于计算 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,而不必担心溢出。
(几乎)新年快乐!