浮点平等和不平等

时间:2013-04-05 17:52:12

标签: floating-point

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

然而,可以假设不平等总是与平等相反吗?也就是说,假设在x64等主流架构上实现的标准IEEE 64位浮点数,a == ba != b中的一个将始终为真,无论存在哪种位模式?

2 个答案:

答案 0 :(得分:4)

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

对于不同的位模式(负零点0x80 ...等于零0x00 ......)进行比较相等的位模式有异常,或者与您已经提到的相同的位模式比较为不等(NaNs),但是! =始终是==的反转。

答案 1 :(得分:2)

必须注意正在测试的关系。 “do x和y有不同的值?”和“x不等于y?”

有不同的测试

如果x或y是NaN,或两者兼而有之,那么它们具有不同的值是错误的(因为它们中至少有一个根本没有任何值),但确实没有相等。< / p>

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

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