fegetround, fesetround
From cppreference.net
|
ヘッダーで定義
<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)
(C99)
(C99)
(C99)
|
現在の丸めモードを使用して整数に丸め、
結果が異なる場合は例外を発生させる (関数) |
|
C++ documentation
for
fegetround
,
fesetround
|
|