Namespaces
Variants

fegetround, fesetround

From cppreference.net
< c ‎ | numeric ‎ | fenv
ヘッダーで定義 <fenv.h>
int fesetround ( int round ) ;
(1) (C99以降)
int fegetround ( ) ;
(2) (C99以降)

1) 浮動小数点丸め方向を引数 round に等しく設定しようと試みます。引数は 浮動小数点丸めマクロ のいずれかであることが期待されます。

2) 現在の丸め方向に対応する 浮動小数点丸めマクロ の値を返します。

目次

パラメータ

round - 丸め方向、 浮動小数点丸めマクロ のいずれか

戻り値

1) 0 成功時は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)); /* 2つの整数の中間値 */
    printf("+12.5 -> %+4.1f\n", rint(+12.5)); /* 2つの整数の中間値 */
    /* 現在の丸め方向を保存 */
    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関数 (p: 193)
  • 7.6.3.2 fesetround関数 (p: 193-194)

関連項目

現在の丸めモードを使用して整数に丸める
(関数)
(C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99)
現在の丸めモードを使用して整数に丸め、
結果が異なる場合は例外を発生させる
(関数)
C++ documentation for fegetround , fesetround