浮动精度 – 为什么0.0> -0.0不适用于IEEE754浮点数?

IEEE754浮点数具有
signed zero的概念,即-0.0和0.0有两种不同的位模式,可以理解为单侧限制:±0:=limδ→0±δ.该标准提供了这些数字与(带符号)无穷大Inf和-Inf(1./±0.给出±Inf)的一致性,并且有一些证据表明它有助于减少舍入误差.

从界限可以清楚地看出,虽然它们是不同的实体,但它们与相同的值相比,即0.0 == -0.0成立.但是,从极限来看,我也认为应该遵守以下内容:0.0> -0.0,因为它适用于任何小的δ.但事实并非如此.由于此属性偶尔会有用(例如,考虑区分两个零),标准委员会选择不这样做是否有任何令人信服的理由?

最佳答案
Mathworld关于浮点运算的数字系统的文章引用
David Goldberg’s famous paper,其中说,

Although distinguishing between +0 and -0 has advantages, it can occasionally be confusing. For example, signed zero destroys the relation x = y ⇔ 1/x = 1/y, which is false when x = +0 and y = -0. However, the IEEE committee decided that the advantages of utilizing the sign of zero outweighed the disadvantages.

该委员会有一个website,这个讨论可以是searched,看起来签名的零是永久争议的根源.

我找不到任何关于你特定问题的信息.但正如一个推测,他们可能想要简化硬件,这种比较只会产生集合{less,greater,equal,unordered}的结果.允许-0< 0和-0 = 0会使某些电路复杂化(并且可能会变慢).这可能被认为是不经济的.

点赞