IEEE 754 中算术运算的“默认舍入模式”一词是什么?

问题描述

我知道 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 术语,还是我所描述的其他特定术语?隐式舍入算法是否也应该支持四种舍入模式?

解决方法

IEEE 754-2008 没有定义舍入的“模式”,也没有定义默认的舍入属性。舍入到最近的关系到偶数通常被许多程序语言、程序语言实现和其他环境用作默认设置。

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

当某些计算环境中存在默认模式时,它是由该计算环境而不是 IEEE 754-2008 建立的。许多处理器架构提供舍入模式作为浮点控制寄存器中的设置。

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

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