对于浮点运算(IEEE754,以防混淆)有哪些好的做法和不该做的事,以确保您的结果具有良好的数值稳定性和高精度?
我知道有些人喜欢不减去相似数量级的数量,但我很好奇还有哪些其他好的规则。
最佳答案
首先,以 float 不必须遵循与实数相同的规则的概念输入...一旦您接受了这一点,您就会理解大部分陷阱。
以下是我一直遵循的一些规则/提示:
- 永远不要将 float 与零或其他任何东西进行比较(IE 不会这样做:
if (myFloat == 0)
- 关联属性不适用于浮点...意思是
(a + b) + c != a + (b + c)
- 记住四舍五入
- float 不一定有唯一的逆
- 没有带 float 的闭包...永远不要假设浮点运算的结果会产生有效的 float 。
- 分配属性(property)不成立
- 尽量避免使用 float 比较...因为舍入错误会导致意外结果
关于c - 浮点运算的 Do-s 和 Don't-s?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3102573/