【发布时间】:2021-03-30 11:56:42
【问题描述】:
我知道 IEEE 754 是浮点数数据类型、它们的表示以及对它们的操作语义的规范;但是 - 我对标准本身并不了解。
我也知道 IEEE 754 定义了以下four rounding modes:到最近、向上、向下、到零;并且在支持 IEEE 754 的典型环境中,您可以说“请使用舍入模式 m 对 x 进行舍入”(例如 here's how it's done with glibc)。这一切都很好。
但是,当您简单地执行算术时,也会发生舍入:如果您有一个单精度 0.9999999(或接近该值的值)并将其添加到 100000,您将得到 100001 或接近 100000.99 的值。
我的问题:这种舍入应该是“默认舍入模式”的应用吗?这是 IEEE 754 术语,还是我所描述的还有另一个特定术语?隐式舍入算法是否也应该支持四种舍入模式?
【问题讨论】:
-
afact,这不是四舍五入,而是像 0.9999999 这样的值的不精确表示的产物 - 请参阅 stackoverflow.com/questions/588004/… 以了解此类浮点数的行为
-
@Gereon:自动舍入不是“不精确表示的产物”吗?反正我就不细说了,就是想知道这些ops的“rounding”模式是怎么选择的。
-
@Gereon:将文本数字“0.9999999”转换为浮点数是 IEEE 754 指定的操作,受舍入影响。但是,我不认为问题中的段落是在询问这种转换。它使用“0.9999999(或接近的值)”作为作者不知道其确切值的某些特定浮点数的代理,问题是关于将该数字添加到其他浮点数的操作号码。
-
注意:IEEE 754-2008 定义了五种舍入模式,而不是四种:round-to-nearest-ties-to-even、round-to-nearest-ties-to-away(从零开始)、向零舍入,向 -∞ 舍入,向 +∞ 舍入。新一轮(round-to-nearest-ties-to-away)对于处理混合精度算术很有用,因为它保留了一些关于舍入中丢失的信息。
标签: rounding precision ieee-754 rounding-error