fegetround, fesetround

現在の浮動小数点丸めモードを取得または設定します。

構文

int fegetround(void);
int fesetround(int round_mode);

パラメーター

round_mode
浮動小数点丸めマクロの 1 つとして設定する丸めモード。 値が浮動小数点丸めマクロの 1 つと等しくない場合、丸めモードは変更されません。

戻り値

成功した場合、 fegetround は浮動小数点丸めマクロ値の 1 つとして、丸めモードを返します。 現在の丸めモードを決定できない場合は、負の値を返します。

成功した場合、 fesetround は 0 を返します。 それ以外の場合、0 以外の値が返されます。

解説

浮動小数点演算には、いくつかある丸めモードのいずれかを使用できます。 これらのモードは、浮動小数点演算の結果を格納時に丸める方向を制御します。 fenv.h> で定義されている浮動小数点丸めマクロの名前と動作を次に<示します。

マクロ 説明
FE_DOWNWARD 負の無限大方向に丸めます。
FE_TONEAREST 最近似値に丸めます。
FE_TOWARDZERO 0 方向に丸めます。
FE_UPWARD 正の無限大方向に丸めます。

既定の FE_TONEAREST 動作では、偶数 (0) の最下位ビットを持つ最も近い値に向かって、表現可能な値の中間に結果を丸めます。

現在の丸めモードは、これらの操作に影響します:

  • 文字列変換。
  • 定数式の外部での浮動小数点算術演算子の結果。
  • rint および nearbyintなどの、ライブラリ丸め関数。
  • 標準ライブラリの数学関数から値を返します。

現在の丸めモードは、次の操作には影響しません。

  • truncceilfloorlround のライブラリ関数。
  • 常に 0 方向に丸める、浮動小数点数から整数への暗黙的なキャストと変換。
  • 常に最近似値に丸める、定数式での浮動小数点算術演算子の結果。

これらの関数を使用するには、呼び出しの前に #pragma fenv_access(on) ディレクティブを使用してアクセスを妨げる可能性のある浮動小数点の最適化をオフにする必要があります。 詳細については、「fenv_access」を参照してください。

重要

Windows 10 バージョン 14393 より前のバージョンでは、 fenv.h 定義 FE_UPWARD = 0x0100 および FE_DOWNWARD = 0x0200. Windows バージョン 14393 では、このヘッダーが更新され、一部の API が (またはその逆) とFE_DOWNWARD解釈FE_UPWARDされるバグに対処しました。 Windows バージョン 14393 以降、 FE_UPWARD = 0x0200 および FE_DOWNWARD = 0x0100以前の値を逆にします。 古い Windows SDK バージョンに対してアプリをコンパイルした場合 (この問題は、OS のバージョンや VS バージョンではなく、SDK のバージョンによって異なります)、この問題が発生する可能性があります。 最新の Windows SDK をターゲットにするようにアプリを更新し、Windows の実装の FE_UPWARD 定義と FE_DOWNWARD 一致するようにします。 アプリを更新して後の Windows SDK をターゲットにできない場合は、コードと同様0x0100FE_DOWNWARD0x0200に定義FE_UPWARDできます。

必要条件

関数 C ヘッダー C++ ヘッダー
fegetround, fesetround <fenv.h> <cfenv>

詳細については、「互換性」をご覧ください。

関連項目

アルファベット順関数リファレンス
nearbyint, nearbyintf, nearbyintl
rint, rintf, rintl
lrint, lrintf, lrintl, llrint, llrintf, llrintl