名前空間
変種
操作

fegetround, fesetround

From 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 The fegetround function (p: TBD)
  • 7.6.3.2 The fesetround function (p: TBD)
  • C17標準 (ISO/IEC 9899:2018)
  • 7.6.3.1 The fegetround function (p: TBD)
  • 7.6.3.2 The fesetround function (p: TBD)
  • 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)

[編集] 関連項目

現在の丸めモードを使用して整数に丸める
(関数) [編集]
(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)
現在の丸めモードを使用して整数に丸める
結果が異なる場合は例外を送出する
(関数) [編集]
C++ ドキュメント (fegetround, fesetround)
English 日本語 中文(简体) 中文(繁體)