浮点减法恒等式

标签 floating-point language-agnostic ieee-754

据我了解,在 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/

相关文章:

javascript - JavaScript 数字是确定性的吗?

c++ - 浮点逆二进制表示

C++ IsFloat 函数

python - Python 是否具有与 java.lang.Math.nextUp 等效的功能?

floating-point - 为什么 float 不正确?

algorithm - N 个请求者和 M 个资源的充足资源

language-agnostic - 音高不变的音频

根据球员排名创建公平/势均力敌的球队的算法

java - java中的除法

c - 4字节(32位)的IEEE 754算术