3

浮点相等比较有时有奇怪的边缘情况,例如两个 NaN 值比较不相等,即使它们是相同的位模式。

然而,可以假设不平等总是平等的反面吗?也就是说,假设标准 IEEE 64 位浮点数在 x64 等主流体系结构上实现,那么无论存在什么位模式,都将是其中之一a == b并且a != b总是正确的?

4

2 回答 2

4

是的,这将永远是正确的,没有数字解释运算符 == 不会返回与 != 完全相反的位模式。

正如您已经提到的,对于不同的位模式(负零 0x80... 等于零 0x00...)或相同的位模式比较为不等(NaN)的位模式有例外,但是 != 总是==的反转。

于 2013-04-05T18:05:41.260 回答
2

必须小心正在测试什么关系。“x 和 y 有不同的值吗?”有不同的测试。和“x不等于y吗?”</p>

如果 x 或 y 是 NaN,或者两者都是 NaN,则它们具有不同的值是错误的(因为它们中至少有一个根本没有任何值),但不存在相等性是正确的。

C 运算符!=询问“不等于”,因此它回答了后一个问题。又因为问的是“不相等”,所以是“相等”的逻辑否定。

某些语言提供了一种询问前一个问题的方法。

于 2013-04-05T18:20:38.950 回答