iva*_*eev 18 c ieee-754 comparison-operators
在https://github.com/numpy/numpy/issues/6428中,错误的根本原因似乎是,simd.inc.src:543编译器优化!(tmp == 0.)为tmp != 0..
评论说这些"不完全相同".但没有指明任何细节.NaNs被进一步提及,但测试显示NaN与0.预期方式相比较.
什么是这里的情况==,并!=可以都返回真/假?
或者差异在另一个领域 - 例如返回具有相同真值但是作为整数不同的值(但测试显示即使这似乎不是这种情况)?
评论说这些"不完全相同".但没有指明任何细节.NaNs被进一步提及,但测试表明NaN与预期的方式相比为0.
==和!=都可以返回true/false的情况是什么?
标准说:
的
==(等于)和!=(不等于)运算符类似于除了它们的优先级低的关系运算符.[...] 对于任何一对操作数,其中一个关系是正确的.
(C2011,6.5.9/3;重点补充)
因此,对于作为这些运算符的操作数共同允许的任何表达式X和Y,(X) != (Y)必须评估与之相同的结果!((X) == (Y)).如果在实践中发现它们不这样做,则产生该结果的编译器在这方面是不符合的.如果该不符合是意外的,则它构成编译器中的错误.
另外,我观察到6.5.9/3同样适用于任何其他操作数的NaN,无穷大和次正规.由于不同的原因,NaNs对于这些运算符是特殊的:NaNs与所有操作数(包括它们自身)(假设IEEE语义)不相等.