【问题标题】:What's the term for "default rounding mode" for arithmetic ops in IEEE 754?IEEE 754 中算术运算的“默认舍入模式”的术语是什么?
【发布时间】: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


【解决方案1】:

IEEE 754-2008 没有定义舍入的“模式”;它改变了 1985 年标准的术语,以暗示比全球模式更具灵活性。在第 4.3.3 节中,它指定 round-to-nearest-ties-to-even 作为二进制格式的默认方法。对于十进制格式,它表示未定义默认值,但应该是四舍五入到最近的偶数。

IEEE 754-2008 子条款 4.3 指定了几个舍入方向属性。它并不是说必须有一种提供舍入方向设置的模式。例如,计算环境可以包括舍入方向属性作为每个单独操作的参数。例如,处理器体系结构可以具有单独的指令,用于四舍五入到偶数的加法、向 +∞ 舍入的加法、向零舍入的加法等。或者它可以包含舍入方向属性作为指令的操作数。或者指令可能会受到某些特殊处理器寄存器中设置的全局模式的影响。

许多处理器架构提供舍入模式作为浮点控制寄存器中的设置。

IEEE 754-1985 标准将舍入模式和定义模式描述为“用户可以设置、感知、保存和恢复以控制后续算术运算执行的变量”。这可能影响了控制寄存器中舍入模式的开发,但这会对性能产生不利影响,因为全局寄存器会导致指令之间的依赖关系:每条浮点指令都依赖于该全局寄存器,因此对该寄存器的任何更改都会干扰并行执行指令。

但是,希望舍入方向灵活,因为在实现区间算术或评估复杂例程(例如正弦或指数的实现)时,可能希望交替使用不同的模式。因此 IEEE 754-2008 委员会更改了标准,不再定义全局模式。第 4 条为属性指定了一些语义,包括语言应该提供为“块”中的所有标准操作指定属性的方法。一个块可以是整个程序或单个操作;它是语言定义的。子条款 4.2 说语言应该提供指定属性的动态方式,以便它们可以在运行时确定。

【讨论】:

    猜你喜欢
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 2011-04-27
    相关资源
    最近更新 更多