simd.inc.src:543
编译器优化!(tmp == 0.)到tmp!= 0 ..
A comment说这些“不一样的事情”。但没有指定任何细节。 NaNs被进一步提及,但测试显示NaN与预期的方式相比。
==和!=可以返回true / false的情况是什么?
或者差异在另一个领域 – 例如返回具有相同真值而不同于int的值(但是测试显示甚至不是这样)?
解决方法
A comment says that these are “not quite the same thing.” But doesn’t specify any details. NaNs are mentioned further on,but a test shows that a NaN compares to 0. the expected way.
What are the cases where == and != can both return true/false?
标准说:
The
==
(equal to) and!=
(not equal to) operators are analogous to the relational operators except for their lower precedence. […] For any pair of operands,exactly one of the relations is true.
(C2011,6.5.9 / 3;加重)
因此,对于共同允许作为这些运算符的操作数的任何表达式X和Y,(X)!=(Y)必须求值与!((X)==(Y))相同的结果。如果在实践中被发现不这样做,那么产生该结果的编译器在这方面是不合规的。如果不合格是意外的,那么它在编译器中构成一个错误。
另外,我观察到,对于任何其他操作数,6.5.9 / 3适用于NaN,无限和子代数。由于不同的原因,NaNs对于这些运算符是特别的:NaNs与所有操作数不同,包括自身(假设为IEEE语义)。