fegetround, fesetround
来自cppreference.com
| 在标头 <fenv.h> 定义
|
||
| |
(1) | (C99 起) |
| |
(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 标准(ISO/IEC 9899:2011):
- 7.6.3.1 The fegetround function (第 212 页)
- 7.6.3.2 The fesetround function (第 212-213 页)
- C99 标准(ISO/IEC 9899:1999):
- 7.6.3.1 The fegetround function (第 193 页)
- 7.6.3.2 The fesetround function (第 193-194 页)
参阅
(C99)(C99)(C99) |
用当前舍入模式取整到整数 (函数) |
(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99) |
使用当前舍入模式取整到整数,若结果有误则产生异常 (函数) |
fegetround, fesetround 的 C++ 文档
| |