我很疑惑,在計算下面的函數時,它會產生數字直到F(0.8,172,1),但是當我增加172到173時,結果變成無窮大。我懷疑有一個數值精度問題?遞歸函數中的數值精度
double F(double d, int c, int t) {
// base cases
if ((c==1 && t==1) || (c==0 && t==0))
return 1.;
if (c==0 || t==0)
return 0.;
if (t>c)
return 0.;
return F(d,c-1,t-1) + (c-1 - t*d)*F(d,c-1,t);
}
您能否解釋這是幹什麼的? – Mox
我不認爲這裏存在精確問題。原因是因爲double函數沒有被用作此函數中任何位置的條件。也許真正的錯誤是在別的地方? – Mox
http://floating-point-gui.de/formats/fp/所以你確實是對的,這是'雙精度'數值精度的問題(從某種意義上講,它是有限的 - 當然,你可以只放這麼多數字轉換爲64位)。 – Ped7g