我很疑惑,在计算下面的函数时,它会产生数字直到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