【发布时间】:2011-02-23 19:25:13
【问题描述】:
IEEE 浮点数分配了一个位来指示符号,这意味着从技术上讲,您可以使用不同的二进制表示零(+0 和 -0)。有没有我可以做的算术运算,例如在 C 中导致负零浮点值?
这个问题的灵感来自另一个问题,它质疑您是否可以使用== 安全地比较0.0f,我进一步想知道是否还有其他方法可以表示零,这会导致float1 == 0.0f 看似完美地中断相等的值。
[编辑] 请不要评论比较浮动是否相等的安全性!我并不是要添加到那些溢出的重复问题中。
【问题讨论】:
-
更有趣的是 NaN。 NaN 比较不等于所有值,包括它自己!
-
“是否有我可以在 C 中执行的算术运算,例如导致负零浮点值?” - 可能 C 是一个不好的例子,因为 C 不保证它的浮点类型是 IEEE 浮点数。就 C 标准而言,没有可移植的方式保证 生成负零,但是有些操作允许 生成负零。还有一种实现方式可以宣传它的浮点数实际上是 IEEE 浮点数,在这种情况下,游戏就开始了。
-
请提供“另一个问题是否可以安全地比较
0.0f使用==”的链接
标签: floating-point language-agnostic negative-zero