namespace std {
int fesetround(int round);
}
概要
浮動小数点数の丸め方式を設定する。
効果
パラメータround
で渡された丸め方式を、標準ライブラリの丸め方式として設定する。
パラメータround
の値が標準ライブラリで定義される丸め方式のマクロ値と異なる場合、丸め方式は変更されない。
戻り値
丸め方式を正しく設定できた場合、この関数は0
を返す。そうでなければ、0
以外の値を返す。
例
#include <iostream>
#include <cfenv>
#include <cmath>
void round_values(const char* mode)
{
float ar[] = {
2.0, 2.1, 2.5, 2.9,
-2.0, -2.1, -2.5, -2.9
};
std::cout << mode << std::endl << " ";
for (float f : ar) {
int x = std::nearbyint(f);
std::cout << '[' << f << " -> " << x << "] ";
}
std::cout << std::endl;
}
int main()
{
// デフォルトの丸めモード (FE_TONEAREST)
round_values("default");
// 切り下げ
std::fesetround(FE_DOWNWARD);
round_values("downward");
// 最も近い値への丸め
std::fesetround(FE_TONEAREST);
round_values("to nearest");
// ゼロ方向への丸め
std::fesetround(FE_TOWARDZERO);
round_values("toward zero");
// 切り上げ
std::fesetround(FE_UPWARD);
round_values("upward");
}
出力
default
[2 -> 2] [2.1 -> 2] [2.5 -> 2] [2.9 -> 3] [-2 -> -2] [-2.1 -> -2] [-2.5 -> -2] [-2.9 -> -3]
downward
[2 -> 2] [2.1 -> 2] [2.5 -> 2] [2.9 -> 2] [-2 -> -2] [-2.1 -> -3] [-2.5 -> -3] [-2.9 -> -3]
to nearest
[2 -> 2] [2.1 -> 2] [2.5 -> 2] [2.9 -> 3] [-2 -> -2] [-2.1 -> -2] [-2.5 -> -2] [-2.9 -> -3]
toward zero
[2 -> 2] [2.1 -> 2] [2.5 -> 2] [2.9 -> 2] [-2 -> -2] [-2.1 -> -2] [-2.5 -> -2] [-2.9 -> -2]
upward
[2 -> 2] [2.1 -> 3] [2.5 -> 3] [2.9 -> 3] [-2 -> -2] [-2.1 -> -2] [-2.5 -> -2] [-2.9 -> -2]
バージョン
言語
- C++11
処理系
- Clang: 3.0 ✅
- GCC: 4.3.0 ✅
- ICC: ??
- Visual C++: 2013 ✅, 2015 ✅
- コンパイルオプション
/fp:strict
または#pragma fenv_access (on)
が必要。さもなくば、正しく動作しないおそれがある。
- コンパイルオプション