我試圖實現Chudnovsky algorithm來計算pi。Chudnovsky算法生成-nan
這是我實現:
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,並停止擔心溢出。
快樂(幾乎)新的一年!
爲什麼開始? python剛剛獲得無限數量的無限空間?您的問題可能會在所有最常用的語言之間共享。 – user1824407
'14!'(或接近)溢出了32位整數。 '事實上(6 * k)'將會非常快地溢出。 – Mat
@ user1824407「爲什麼?python剛剛獲得了無限數量的無限空間?」 - 現在誰在討論Python?這是C,它甚至不以任何方式關閉Python ... – 2012-12-29 10:30:01