fegetround, fesetround

来自cppreference.com
< c‎ | numeric‎ | fenv
定义于头文件 <fenv.h>
int fesetround( int round );
(1) (C99起)
int fegetround(void);
(2) (C99起)
1) 尝试确立等于参数round的浮点摄入方向,参数期待为浮点舍入宏之一。
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)

[编辑] 参阅

用当前舍入模式取整到整数
(函数) [edit]
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
使用当前舍入模式取整到整数,若结果有误则产生异常
(函数) [edit]
fegetroundfesetroundC++文档