# fegetround, fesetround

< 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 标准（ISO/IEC 9899:2011）：

  - 7.6.3.1 The fegetround function (p: 212)

  - 7.6.3.2 The fesetround function (p: 212-213)

- C99 标准（ISO/IEC 9899:1999）：

  - 7.6.3.1 The fegetround function (p: 193)

  - 7.6.3.2 The fesetround function (p: 193-194)

### 参阅

nearbyint nearbyintf nearbyintl (C99)(C99)(C99) | 用当前舍入模式取整到整数 (函数)
rint rintf rintl lrint lrintf lrintl llrint llrintf llrintl (C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99) | 使用当前舍入模式取整到整数，若结果有误则产生异常 (函数)