%>
获取或设置当前的浮点舍入模式。
语法
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) 最低有效位的最近值舍入。
当前舍入模式将影响以下操作:
- 字符串转换
- 常量表达式之外的浮点算术运算符的结果。
- 库舍入函数,如
rint
和nearbyint
。 - 从标准库的数学函数返回的值。
当前舍入模式不影响以下操作:
trunc
、ceil
、floor
和lround
库函数。- 浮点到整数隐式强制转换和转换,始终向零舍入。
- 常量表达式中浮点算术运算符的结果,始终舍入到最接近的值。
若要使用这些函数,必须在调用前先使用 #pragma fenv_access(on)
指令关闭可能会阻止访问的浮点优化。 有关详细信息,请参阅 fenv_access
。
重要
在 Windows 10 版本 14393 之前,fenv.h
定义 FE_UPWARD = 0x0100
和 FE_DOWNWARD = 0x0200
。 在 Windows 版本 14393 中,此标头已更新,以解决有些 API 将 FE_UPWARD
解释为 FE_DOWNWARD
(反之亦然)的 bug。 从 Windows 版本 14393 开始,FE_UPWARD = 0x0200
和 FE_DOWNWARD = 0x0100
将反转其以前的值。
如果针对旧 Windows SDK 版本编译应用(此问题取决于 SDK 版本,而不是 OS 版本或 VS 版本),可能会遇到此问题。 将应用更新为面向最新的 Windows SDK,以便 FE_UPWARD
和 FE_DOWNWARD
的定义与 Windows 实现保持一致。 如果无法将应用更新为面向更高版本的 Windows SDK,则可以在代码中将 FE_UPWARD
定义为 0x0100
,将 FE_DOWNWARD
定义为 0x0200
。
要求
函数 | C 标头 | C++ 标头 |
---|---|---|
%> | <fenv.h> |
<cfenv> |
有关详细信息,请参阅兼容性。
另请参阅
按字母顺序显示的函数参考
.- .
.- .