简单的递归帮助

Mil*_*den 1 c algorithm recursion game-physics

我有一个简单的递归函数,使用height1:height2的比率0.98计算一个简单的摆摆动衰减.

该函数的基本情况为0.0,但由于某种原因,它变成了无限的自我调用!

任何人都可以发现我错过的东西吗?

码:

float swingDecay (float value) {


     if ( value == 0.00 ) {
          return value;
     }

     else { 
          return swingDecay (value * 0.98);  }     
}
Run Code Online (Sandbox Code Playgroud)

mIL3S www.milkdrinkingcow.com

Nik*_*bak 6

您应该始终在浮点计算中使用"近似"比较.例如,if (abs(value) < EPS)而不是if ( value == 0.00 ).EPS这是一个小常量(取决于您的要求和数据类型).

我怀疑这是实际发生的事情.您可以获得数据类型中可能的最小正值,例如1 * 2^(-10000)(10000来自我的头脑)和现在value * 0.98 = value.例如,它必须四舍五入到0或到total并且0.98*total显然更接近total.
但这只是猜测.使用浮点计算,您永远无法确定:)