fegetroundfesetround

获取或设置当前的浮点舍入模式。

语法

int fegetround(void);
int fesetround(int round_mode);

参数

round_mode
要作为其中一个浮点舍入宏设置的舍入模式。 如果该值不等于其中一个浮点舍入宏,则不会更改舍入模式。

返回值

如果成功,则 fegetround 返回作为其中一个浮点舍入宏值的舍入模式。 如果无法确定当前的舍入模式,它返回一个负值。

如果成功, fesetround 返回 0。 否则,返回一个非零值。

备注

浮点运算可以使用数种舍入模式中的其中一种。 这些模式控制存储结果时浮点运算结果的舍入方向。 下面是在 <fenv.h> 中定义的浮点舍入宏的名称和行为:

说明
FE_DOWNWARD 向负无穷舍入。
FE_TONEAREST 向最近一方舍入。
FE_TOWARDZERO 向零舍入。
FE_UPWARD 向正无穷舍入。

FE_TONEAREST 的默认行为是要将结果从可表示值的中间向具有偶数 (0) 最低有效位的最近值舍入。

当前舍入模式将影响以下操作:

  • 字符串转换
  • 常量表达式之外的浮点算术运算符的结果。
  • 库舍入函数,如 rintnearbyint
  • 从标准库的数学函数返回的值。

当前舍入模式不影响以下操作:

  • truncceilfloorlround 库函数。
  • 浮点到整数隐式强制转换和转换,始终向零舍入。
  • 常量表达式中浮点算术运算符的结果,始终舍入到最接近的值。

若要使用这些函数,必须在调用前先使用 #pragma fenv_access(on) 指令关闭可能会阻止访问的浮点优化。 有关详细信息,请参阅 fenv_access

重要

在 Windows 10 版本 14393 之前,fenv.h 定义 FE_UPWARD = 0x0100FE_DOWNWARD = 0x0200。 在 Windows 版本 14393 中,此标头已更新,以解决有些 API 将 FE_UPWARD 解释为 FE_DOWNWARD(反之亦然)的 bug。 从 Windows 版本 14393 开始,FE_UPWARD = 0x0200FE_DOWNWARD = 0x0100 将反转其以前的值。 如果针对旧 Windows SDK 版本编译应用(此问题取决于 SDK 版本,而不是 OS 版本或 VS 版本),可能会遇到此问题。 将应用更新为面向最新的 Windows SDK,以便 FE_UPWARDFE_DOWNWARD 的定义与 Windows 实现保持一致。 如果无法将应用更新为面向更高版本的 Windows SDK,则可以在代码中将 FE_UPWARD 定义为 0x0100,将 FE_DOWNWARD 定义为 0x0200

要求

函数 C 标头 C++ 标头
fegetroundfesetround <fenv.h> <cfenv>

有关详细信息,请参阅兼容性

另请参阅

按字母顺序显示的函数参考
nearbyintnearbyintfnearbyintl
rintrintfrintl
lrintlrintflrintlllrintllrintfllrintl