最終更新日時:
が更新

履歴 編集

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