fegetround, fesetround
From cppreference.net
|
定义于头文件
<fenv.h>
|
||
|
int
fesetround
(
int
round
)
;
|
(1) | (C99 起) |
|
int
fegetround
(
)
;
|
(2) | (C99 起) |
1) 尝试将浮点舍入方向设置为参数 round 的值,该参数应为某个 浮点舍入宏 。
2) 返回与当前舍入方向对应的 浮点数舍入宏 的值。
目录 |
参数
| round | - | 舍入方向,为 浮点舍入宏 之一 |
返回值
1) 0 表示成功,非零值表示失败。
2) 描述当前舍入方向的 浮点舍入宏 ,若无法确定方向则返回负值。
注释
当前的舍入模式,反映了最近一次
fesetround
的效果,也可以通过
FLT_ROUNDS
进行查询。
示例
运行此代码
#include <fenv.h> #include <math.h> #include <stdio.h> // #pragma STDC FENV_ACCESS ON void show_fe_current_rounding_direction(void) { printf("current rounding direction: "); 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_direction(); printf("+11.5 -> %+4.1f\n", rint(+11.5)); /* 两个整数的中间值 */ printf("+12.5 -> %+4.1f\n", rint(+12.5)); /* 两个整数的中间值 */ /* 保存当前舍入方向 */ int curr_direction = fegetround(); /* 临时更改当前舍入方向 */ fesetround(FE_DOWNWARD); show_fe_current_rounding_direction(); printf("+11.5 -> %+4.1f\n", rint(+11.5)); printf("+12.5 -> %+4.1f\n", rint(+12.5)); /* 恢复默认舍入方向 */ fesetround(curr_direction); show_fe_current_rounding_direction(); return 0; }
可能的输出:
current rounding direction: FE_TONEAREST +11.5 -> +12.0 +12.5 -> +12.0 current rounding direction: FE_DOWNWARD +11.5 -> +11.0 +12.5 -> +12.0 current rounding direction: FE_TONEAREST
参考文献
- C23 标准 (ISO/IEC 9899:2024):
-
- 7.6.3.1 fegetround 函数 (p: TBD)
-
- 7.6.3.2 fesetround 函数 (p: TBD)
- C17 标准 (ISO/IEC 9899:2018):
-
- 7.6.3.1 fegetround 函数 (p: TBD)
-
- 7.6.3.2 fesetround 函数 (p: TBD)
- C11 标准 (ISO/IEC 9899:2011):
-
- 7.6.3.1 fegetround 函数 (p: 212)
-
- 7.6.3.2 fesetround 函数 (p: 212-213)
- C99标准(ISO/IEC 9899:1999):
-
- 7.6.3.1 fegetround函数(页码:193)
-
- 7.6.3.2 fesetround函数(页码:193-194)
参见
|
(C99)
(C99)
(C99)
|
使用当前舍入模式舍入到整数
(函数) |
|
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
|
使用当前舍入模式舍入到整数,若结果不同则产生异常
(函数) |
|
C++ 文档
关于
fegetround
,
fesetround
|
|