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
などの、ライブラリ丸め関数。- 標準ライブラリの数学関数から値を返します。
現在の丸めモードは、次の操作には影響しません。
trunc
、ceil
、floor
、lround
のライブラリ関数。- 常に 0 方向に丸める、浮動小数点数から整数への暗黙的なキャストと変換。
- 常に最近似値に丸める、定数式での浮動小数点算術演算子の結果。
これらの関数を使用するには、呼び出しの前に #pragma fenv_access(on)
ディレクティブを使用してアクセスを妨げる可能性のある浮動小数点の最適化をオフにする必要があります。 詳細については、「fenv_access
」を参照してください。
重要
Windows 10 バージョン 14393 より前では、fenv.h
FE_UPWARD = 0x0100
とFE_DOWNWARD = 0x0200
定義されています。 Windows バージョン 14393 では、このヘッダーが更新され、一部の API が FE_UPWARD
を FE_DOWNWARD
と解釈するバグに対処しました。その逆も同様です。 Windows バージョン 14393 以降では、 FE_UPWARD = 0x0200
と FE_DOWNWARD = 0x0100
、以前の値が逆になります。
古い Windows SDK バージョンに対してアプリをコンパイルした場合 (この問題は、OS のバージョンや VS バージョンではなく、SDK のバージョンによって異なります)、この問題が発生する可能性があります。 FE_UPWARD
とFE_DOWNWARD
の定義が Windows の実装と一致するように、最新の Windows SDK をターゲットにするようにアプリを更新します。 アプリを更新して後の Windows SDK をターゲットにできない場合は、FE_UPWARD
を0x0100
として定義し、コード内で0x0200
としてFE_DOWNWARD
できます。
要件
機能 | C ヘッダー | C++ ヘッダー |
---|---|---|
fegetround , fesetround |
<fenv.h> |
<cfenv> |
詳細については、「互換性」をご覧ください。
関連項目
関数リファレンス (アルファベット順)
nearbyint
、 nearbyintf
、 nearbyintl
rint
、 rintf
、 rintl
lrint
、 lrintf
、 lrintl
、 llrint
、 llrintf
、 llrintl