gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:29:57 26 4
gpt4 key购买 nike

https://github.com/numpy/numpy/issues/6428 ,错误的根本原因似乎是 simd.inc.src:543 ,编译器将 !(tmp == 0.) 优化为 tmp != 0.

A comment说这些“不是一回事”。但没有说明任何细节。进一步提到了 NaN,但测试表明 NaN 与 0. 比较是预期的方式。

什么情况下 ==!= 都可以返回 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、无穷大和次正规。由于不同的原因,NaN 对于这些运算符而言是特殊的:NaN 与所有操作数相比都不相等,包括它们自身(假设 IEEE 语义)。

关于float == 和 != 不是直接对立的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38270589/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com