fegetround, fesetround
来自cppreference.com
定义于头文件 <fenv.h>
|
||
int fesetround( int round ); |
(1) | (C99 起) |
int fegetround(void); |
(2) | (C99 起) |
2) 返回对应当前舍入方向的浮点舍入宏。
参数
round | - | 舍入方向,浮点舍入宏之一 |
返回值
1) 成功时为 0 ,否则为非零。
2) 描述当前舍入方向的浮点舍入宏,或若不能确定方向则为负值
注意
当前舍入方向反映最近的 fesetround
的效果,亦能以 FLT_ROUNDS 查询。
示例
运行此代码
#include <stdio.h> #include <math.h> #include <fenv.h> #pragma STDC FENV_ACCESS ON void show_fe_current_rounding_method(void) { printf("current rounding method: "); switch (fegetround()) { case FE_TONEAREST: printf ("FE_TONEAREST"); break; case FE_DOWNWARD: printf ("FE_DOWNWARD"); break; case FE_UPWARD: printf ("FE_UPWARD"); break; case FE_TOWARDZERO: printf ("FE_TOWARDZERO"); break; default: printf ("unknown"); }; printf("\n"); } int main(void) { /* 默认舍入方法 */ show_fe_current_rounding_method(); printf("+11.5 -> %+4.1f\n", rint(+11.5)); /* 两整数的中央值 */ printf("+12.5 -> %+4.1f\n", rint(+12.5)); /* 两整数的中央值 */ /* 保存舍入方法。 */ int curr_method = fegetround(); /* 临时更改当前舍入方法。 */ fesetround(FE_DOWNWARD); show_fe_current_rounding_method(); printf("+11.5 -> %+4.1f\n", rint(+11.5)); printf("+12.5 -> %+4.1f\n", rint(+12.5)); /* 恢复舍入方法。 */ fesetround(curr_method); show_fe_current_rounding_method(); return 0; }
可能的输出:
current rounding method: FE_TONEAREST +11.5 -> +12.0 +12.5 -> +12.0 current rounding method: FE_DOWNWARD +11.5 -> +11.0 +12.5 -> +12.0 current rounding method: FE_TONEAREST
引用
- C11 standard (ISO/IEC 9899:2011):
- 7.6.3.1 The fegetround function (p: 212)
- 7.6.3.2 The fesetround function (p: 212-213)
- C99 standard (ISO/IEC 9899:1999):
- 7.6.3.1 The fegetround function (p: 193)
- 7.6.3.2 The fesetround function (p: 193-194)
参阅
(C99)(C99)(C99) |
用当前舍入模式取整到整数 (函数) |
(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99) |
使用当前舍入模式取整到整数,若结果有误则产生异常 (函数) |