fp_read_rnd 或 fp_swap_rnd 子例程
用途
读取并设置 IEEE 浮点取整方式。
库
标准 C 库 (libc.a)
语法
#include <float.h>
描述
fp_read_rnd 子例程返回当前舍入方式。 fp_swap_rnd 子例程将舍入方式更改为 RoundMode 参数,并在更改前返回舍入方式的值。
当浮点运算的无限精确结果不能精确地以目标浮点格式 (例如双精度格式) 表示时,将发生浮点舍入。
用于二元浮点算术的 IEEE 标准 允许以四种不同的方式对浮点数进行舍入: 向零舍入,向最接近的舍入,向 + INF 舍入以及向 -INF 舍入。 一旦选择了舍入方式,它就会影响所有后续浮点运算,直到选择了另一个舍入方式为止。
注: 缺省浮点舍入方式为舍入到最接近的值. 所有 C 主程序都以设置为舍入到最接近的舍入方式开始。
舍入方式的编码是那些在 ANSI C 标准中定义的编码。 float.h 文件包含舍入方式的定义。 下面是 float.h 定义, ANSI C Standard 值以及每个舍入方式的描述。
| float.h 定义 | ANSI 值 | 描述 |
|---|---|---|
| FP_RND_RZ | 0 | 向 0 舍入 |
| FP_RND_RN | 1 | 舍入到最接近的值 |
| FP_RND_RP | 2 | 向 + INF 舍入 |
| FP_RND_RM | 3 | 朝 -INF 方向舍入 |
通过保存 fp_swap_rnd(RoundMode) 中的返回值,可以使用 fp_swap_rnd 子例程来交换舍入方式。 这在需要强制特定舍入方式在函数期间使用,但希望在退出时恢复调用者的舍入方式的函数中可能很有用。 下面是一个完成此操作的代码片段:
save_mode = fp_swap_rnd (new_mode);
....desired code using new_mode
(void) fp_swap_rnd(save_mode); /*restore caller's mode*/参数
| 项 | 描述 |
|---|---|
| RoundMode | 指定下列其中一个方式: FP_RND_RZ, FP_RND_RN, FP_RND_RP或 FP_RND_RM。 |