float ==和!=不是直接对立的情况

前端之家收集整理的这篇文章主要介绍了float ==和!=不是直接对立的情况前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
https://github.com/numpy/numpy/issues/6428,bug的根本原因似乎是在 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语义)。

猜你在找的CSS相关文章