有效的浮点控制和查询过程
IBM® Open XL Fortran 提供了若干过程,允许您直接查询和控制处理器的浮点状态和控制寄存器。 这些过程比 fpgets 和 fpsets 子例程更高效,因为它们映射到直接处理浮点状态和控制寄存器 (fpscr) 的内联机器指令中。
IBM Open XL
Fortran 提供了模块
要使用这些过程,必须向源文件添加
xlf_fp_util,其中包含这些过程的接口和数据类型定义以及这些过程所需的指定常量的定义。 此模块允许在编译时而不是在链接时对这些过程进行类型检查。 在调用过程时,可以使用示例中列出的自变量名称作为关键字自变量的名称。 为 xlf_fp_util 模块提供了以下文件:| 文件名 | 文件类型 | 位置 |
|---|---|---|
| xlf_fp_util.mod | 模块符号文件 |
注: 这些目录中的文件是彼此的精确副本。
|
USE XLF_FP_UTIL 语句。 有关 USE的更多信息,请参阅 USE。如果存在名称冲突 (例如,如果访问子程序具有与模块实体同名的实体) ,请使用 ONLY 子句或 USE 语句的重命名功能。 例如
USE XLF_FP_UTIL, NULL1 => get_fpscr, NULL2 => set_fpscr使用 -qmixed 选项进行编译时,必须以全小写形式对这些过程的名称进行编码。 我们将在此处以小写形式显示名称作为提示。
fpscr 过程为:
下表列出了用于 fpscr 过程的常量:
| 系列 | 常量 | 描述 |
|---|---|---|
| IEEE 舍入方式 | FP_RND_RN | 向最接近的方向舍入 (缺省值) |
| FP_RND_RZ | 向零舍入 | |
| FP_RND_RP | 向加无穷大舍入 | |
| FP_RND_RM | 向负无穷大舍入 | |
| FP_RND_MODE | 用于从 FPSCR 标志变量或值获取舍入方式 | |
| IEEE 异常启用标志 1 | TRP_INEXACT | 启用不精确陷阱 |
| TRP_DIV_BY_ZERO | 启用除零陷阱 | |
| TRP_UNDERFLOW | 启用下流陷阱 | |
| TRP_OVERFLOW | 启用溢出陷阱 | |
| TRP_INVALID | 启用无效陷阱 | |
| FP_ENBL_SUMM | 陷阱启用摘要或全部启用 | |
| IEEE 异常状态标志 | Fp_无效 | 操作异常无效 |
| FP_OVERFLOW | 溢出异常 | |
| Fp_underflow | 下流异常 | |
| FP_DIV_BY_ZERO | "除以零" 异常 | |
| FP_INEXACT | 不精确异常 | |
| FP_ALL_IEEE_XCP | 所有 IEEE 异常摘要标志 | |
| FP_COMMON_IEEE_XCP | 除 FP_INEXACT 异常以外的所有 IEEE 异常摘要标志 | |
| 特定于机器的异常详细信息标志 | FP_INV_SNAN | 发信号 NaN |
| FP_INV_ISI | 英菲尼迪-英菲尼迪 | |
| FP_INV_IDI | 英菲尼迪/英菲尼迪 | |
| FP_INV_ZDZ | 0 / 0 | |
| FP_INV_IMZ | 无限 * 0 | |
| FP_INV_CMP | 无序比较 | |
| FP_INV_SQRT | 负数的平方根 | |
| FP_INV_CVI | 转换为整数错误 | |
| FP_INV_VXSOFT | 软件请求 | |
| 特定于机器的异常摘要标志 | FP_ANY_XCP | 任何异常摘要标志 |
| FP_ALL_XCP | 所有异常摘要标志 | |
| FP_COMMON_XCP | 所有异常摘要标志 (不包括 FP_INEXACT 异常) | |
备注信息:
|
||