Oracle® Solaris Studio 12.4:数值计算指南

退出打印视图

更新时间: 2015 年 1 月
 
 

3.4.3 ieee_flags(3m)

ieee_flags (3m) 是用于以下功能的 Oracle 接口:

  • 查询或设置舍入方向模式

  • 查询或设置舍入精度模式

  • 检查、清除或设置已发生异常标志

调用 ieee_flags(3m) 的语法为:

i = ieee_flags(action, mode, in, out);

可能作为参数值的 ASCII 字符串如Table 3–13 所示:

表 3-13  ieee_flags 的参数值
参数
C 或 C++ 类型
所有可能的值
action
char *
getsetclearclearall
mode
char *
directionprecisionexception
in
char *
nearesttozeronegativepositiveextendeddoublesingleinexactdivisionunderflowoverflowinvalidallcommon
out
char **
nearesttozeronegativepositiveextendeddoublesingleinexactdivisionunderflowoverflowinvalidallcommon

ieee_flags(3m) 手册页详细介绍了这些参数。

以下段落介绍了可使用 ieee_flags 修改的某些算法功能。第 4 章中包含有关 ieee_flags 和 IEEE 异常标志的更多信息。

如果 modedirection,则说明指定的操作适用于当前的舍入方向。可能的舍入方向为:向最接近的值舍入、向零舍入、向 +· 舍入或向 −· 舍入。IEEE 缺省舍入方向为最接近的值舍入。这意味着,如果运算的数学结果恰好位于两个相邻的可表示的数字之间,则提供最接近数学结果的数字。(如果数学结果恰好位于两个最接近的可表示的数字中间,会将最低有效位为零的数字作为结果提供。有时将最接近的值舍入模式称为向最接近的偶数舍入以进行强调。)

向零舍入是 IEEE 之前的很多计算机的工作方式,且在数学计算中与将结果截断操作一致。 例如,如果将 2/3 舍入到 6 个十进制数字,则当舍入模式为向最接近的值舍入时结果为 .666667,当舍入模式为向零舍入时结果为 .666666。

在使用 ieee_flags 检查、清除或设置舍入方向时,四个可能的输入参数值如Table 3–14 所示。

表 3-14  ieee_flags 舍入方向的输入值
参数
可能的值(mode 为 direction
action
getsetclearclearall
in
nearesttozeronegativepositive
out
nearesttozeronegativepositive

如果 modeprecision,则说明指定的操作适用于当前的舍入精度。在基于 x86 的系统上,可能的舍入精度为:单、双和扩展精度。缺省的舍入精度为扩展精度;在这种模式下,提供 x87 浮点寄存器结果的算术运算将其结果舍入到使用扩展双寄存器格式的完整 64 位精度。当舍入精度为单或双精度时,提供 x87 浮点寄存器结果的算术运算将其结果分别舍入到 24 或 53 个有效位。虽然大多数程序在使用扩展舍入精度时生成很准确的结果(即便不是最准确的结果),但某些要求严格遵循 IEEE 算法语义的程序在扩展舍入精度模式下无法正常工作,必须将舍入精度相应地设置为单精度或双精度才能运行这些程序。

在使用 SPARC 处理器的系统上不能设置舍入精度。在这些系统上,使用 mode = precision 调用 ieee_flags 对计算没有影响。

最后,如果 modeexception,则说明指定的操作适用于当前的 IEEE 异常标志。有关使用 ieee_flags 检查和控制 IEEE 异常标志的更多信息,请参见Chapter 4, 异常和异常处理