我正在尝试实施Chudnovsky algorithm来计算pi。
这是我的实施:
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,并且不要担心溢出。
快乐(差不多)新年!
答案 0 :(得分:3)
浮点算术它不是微不足道的,考虑到你的问题,我更愿意回答你的问题。
您可以使用GMP或MPFR等库来解决此问题,这是a good FAQ for both。
如果您真的想掌握这一点,几乎在所有主流编程语言中,您都应该从阅读IEEE 754开始。