c - 简单递归帮助

标签 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);  }     
}

mIL3S www.milkdrinkingcow.com

最佳答案

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

我怀疑这就是实际发生的事情。您将获得数据类型中可能的最小正值,例如 1 * 2^(-10000) (10000 来 self 的头顶)现在 value * 0.98 = value .例如,它必须四舍五入为 0total0.98*total明显更接近total .
但这只是猜测。对于浮点计算,您永远无法确定 :)

关于c - 简单递归帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4628939/

相关文章:

c++ - 检查打印机是否存在的程序

c# - 将三个文件合并为一个大文件

algorithm - 如何对(百万/十亿/...)整数进行排序?

c++ - 在递归函数c++中保持原始值

java - 使用 Java 进行排序和二分搜索

c - gcc make 最后一步出错

c - 如何使用 strcpy() 函数将字符存储到 char 指针中

c++ - 多线程环境中的 Linux 高分辨率计时器?

algorithm - 从一亿个数字中检索前 100 个数字

C - (递归地)给定一个字符串,返回它的反向