次の関数を評価すると、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