• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    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_DOWNWARDFE_TONEARESTFE_TOWARDZEROFE_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