【发布时间】:2016-11-17 05:39:32
【问题描述】:
我很困惑,在评估以下函数时,它会产生直到 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);
}
【问题讨论】:
-
你能解释一下这是做什么的吗?
-
我认为这里没有精度问题。原因是因为双精度没有被用作此函数中的任何地方的条件。也许真正的错误在其他地方?
-
floating-point-gui.de/formats/fp 所以你实际上是对的,这是
double数值精度的问题(从某种意义上说,它在各个方面都受到限制 - 当然,你只能将这么多数字放入 64 位)。