名稱空間
變體
操作

fegetround, fesetround

來自 cppreference.com
< c‎ | 數值‎ | fenv
定義於標頭檔案 <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)
{
    /* Default rounding direction */
    show_fe_current_rounding_direction();
    printf("+11.5 -> %+4.1f\n", rint(+11.5)); /* midway between two integers */
    printf("+12.5 -> %+4.1f\n", rint(+12.5)); /* midway between two integers */
 
    /* Save current rounding direction. */
    int curr_direction = fegetround();
 
    /* Temporarily change current rounding direction. */
    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));
 
    /* Restore default rounding direction. */
    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 函式 (p: 193)
  • 7.6.3.2 fesetround 函式 (p: 193-194)

[編輯] 參閱

使用當前舍入模式四捨五入到整數
(函式) [編輯]
(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)
使用當前舍入模式四捨五入到整數
如果結果不同則丟擲異常
(函式) [編輯]
C++ 文件 for fegetround, fesetround