据我了解,在 IEEE 浮点中,以下标识确实始终适用:
x - 0.0 == x
但由于有关符号零的问题,以下数学恒等式可能不一定总是适用:
0.0 - x == -x
这是正确的吗?
最佳答案
(+0) − (+0) 在向 −∞ 舍入时返回 (−0),但在所有其他舍入模式中返回 (+0)。因此,将 x - 0.0
替换为 x
将提供按位相同的结果仅当朝向 −∞(“向下”)的舍入模式被排除时.然而,由于 (-0) 和 (+0) 在 IEEE-754 语义下比较相等,x - 0.0 == x
将适用于所有舍入模式。
−(+0) 导致 (−0),而 (+0) − (+0) 在所有舍入模式中返回 (+0),而不是向 −∞ 舍入。因此,将 0.0 - x
替换为 -x
将仅在舍入模式朝向 −∞(“向下”)时提供按位相同的结果。然而,由于 (-0) 和 (+0) 在 IEEE-754 语义下比较相等,0.0 -x == -x
将适用于所有舍入模式。
就按位相等(而不是浮点相等比较)而言,还应注意,在 IEEE-754 (2008) 中,取反 操作是(如绝对值 和 copysign 操作)根据位串操作定义,因此将修改 NaN 的“符号位”(参见标准的第 6.3 节)。在实现 NaN 有效负载传递的平台上,如果 x
是 NaN,则从零取反和减去的结果因此在位级别上不同。
关于浮点减法恒等式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58110249/