在一实际的语言实现中,如Java,它无法完全实现数学上的”相等“关系,这里要列举违反”自反性“的例子。
这个表达式的值可能为真吗?
i != i
当然,Java里有两个值可以让其为真,一为Double.NaN,二为Float.NaN。NaN不等于任何数,包括不等于NaN。
据JLS里的说法(附2),这是依据IEEE 754,只要表达式中含有操作数NaN (Not a Number),那么==便不成立,成立的是!=。因此,下面的代码也会输出false的:
double i = 0.0 / 0.0;
System.out.println(i - i == 0);
另外,一切NaN参与的浮点运算,结果都是NaN.
PS: 不理解为什么书中的标题是Birde of Looper.
附