fp_read_rnd 或 fp_swap_rnd 子例程

用途

读取并设置 IEEE 浮点取整方式。

标准 C 库 (libc.a)

语法

#include <float.h>
fprnd_t fp_read_rnd()
fprnd_t fp_swap_rnd( RoundMode)
fprnd_t RoundMode;

描述

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_RZFP_RND_RNFP_RND_RP FP_RND_RM