浮点数的相等和不相等

3

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

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

2个回答

4

是的,这将永远是真实的,没有任何数字解释会导致运算符==和!=返回相反的结果。

有一些例外情况,比如对于不同的位模式而言被认为相等的位模式(负零0x80...等于零0x00...)或者同一位模式被认为不相等的情况(NaN),但!=总是==的反义词。


2

在测试关系时必须小心。对于“x和y的值是否不同?”和“x是否不等于y?”有不同的测试方法。

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

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

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


1
在C语言中,<math.h>头文件中的islessgreater(x,y)宏提供了您所描述的操作。 - Stephen Canon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接