浮点相等比较有时会出现奇怪的边缘情况,例如:两个NaN值相比即使它们是相同的位模式也不相等。
然而,可以假设不平等总是与平等相反吗?也就是说,假设在x64等主流架构上实现的标准IEEE 64位浮点数,a == b
和a != b
中的一个将始终为真,无论存在哪种位模式?
答案 0 :(得分:4)
是的,这将永远为真,没有数字解释的位模式,运算符==将不会返回完全相反的!=。
对于不同的位模式(负零点0x80 ...等于零0x00 ......)进行比较相等的位模式有异常,或者与您已经提到的相同的位模式比较为不等(NaNs),但是! =始终是==的反转。
答案 1 :(得分:2)
必须注意正在测试的关系。 “do x和y有不同的值?”和“x不等于y?”
有不同的测试如果x或y是NaN,或两者兼而有之,那么它们具有不同的值是错误的(因为它们中至少有一个根本没有任何值),但确实没有相等。< / p>
C运算符!=
询问“不相等”,因此它回答了后一个问题。而且因为它询问“不平等”,这是“平等”的逻辑否定。
有些语言提供了一种询问前一个问题的方法。