我有一个简单的递归函数,它使用 height1:height2 的比率 0.98 计算简单的钟摆摆动衰减。
该函数的基本情况为 0.0,但由于某种原因它变成了无限的自调用!
谁能发现我遗漏了什么?
代码:
float swingDecay (float value) {
if ( value == 0.00 ) {
return value;
}
else {
return swingDecay (value * 0.98); }
}
mIL3S www.milkdrinkingcow.com
最佳答案
您应该始终在浮点计算中使用“近似”比较。例如,if (abs(value) < EPS)
而不是 if ( value == 0.00 )
. EPS
这是一个小常量(取决于您的要求和数据类型)。
我怀疑这就是实际发生的事情。您将获得数据类型中可能的最小正值,例如 1 * 2^(-10000)
(10000 来 self 的头顶)现在 value * 0.98 = value
.例如,它必须四舍五入为 0
或 total
和 0.98*total
明显更接近total
.
但这只是猜测。对于浮点计算,您永远无法确定 :)
关于c - 简单递归帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4628939/