最終更新日時: 2025年07月13日 13時07分37秒 (JST)
Koichi Murase が更新

履歴 編集

macro
<cfloat>

# FLT_ROUNDS

    #define FLT_ROUNDS implementation-defined

## 概要

`FLT_ROUNDS` は、浮動小数点数の加算の丸めモードを表すマクロである。

`FLT_ROUNDS` が

- 0 のとき、0 方向に丸める。
- 1 のとき、最も近い値に丸める。
- 2 のとき、正の無限大方向に丸める。
- 3 のとき、負の無限大方向に丸める。
- -1 のとき、不確定。

その他の数のとき、実装依存の動作をする。

`<cfloat>` ヘッダの他のマクロと異なり、`FLT_ROUNDS` の値は定数ではなく、`<cfenv>` ヘッダの `fesetround()` による実行時の丸めモード変更が反映される。
従って、`FLT_ROUNDS` は `#if` プリプロセッサディレクティブで使用することはできない。

## 備考

`fesetround()`、および、`fegetround()` で用いられるマクロ（`FE_DOWNWARD`、`FE_TONEAREST`、`FE_TOWARDZERO`、`FE_UPWARD`）の値は、本マクロの値と対応しているわけでは無いため注意。

## 例

    #include <iostream>
    #include <cfloat>
    #include <cfenv>

    int main()
    {
      std::cout << "FLT_ROUNDS = " << FLT_ROUNDS << '\n';
      std::cout << std::fesetround(FE_TOWARDZERO) << '\n';
      std::cout << "FLT_ROUNDS = " << FLT_ROUNDS << '\n';
    }

### 出力例

    FLT_ROUNDS = 1
    0
    FLT_ROUNDS = 0