std::numeric_limits<T>:: round_style
|
static
const
std::
float_round_style
round_style
;
|
(C++11まで) | |
|
static
constexpr
std::
float_round_style
round_style
;
|
(C++11以降) | |
std::
numeric_limits
<
T
>
::
round_style
の値は、浮動小数点型
T
が
T
の正確に表現可能な値のいずれでもない値をその型のオブジェクトに格納する際に使用される丸め方式を識別します。
目次 |
標準特殊化
T
|
std:: numeric_limits < T > :: round_style の値 |
| /* non-specialized */ | std::round_toward_zero |
| bool | std::round_toward_zero |
| char | std::round_toward_zero |
| signed char | std::round_toward_zero |
| unsigned char | std::round_toward_zero |
| wchar_t | std::round_toward_zero |
| char8_t (C++20以降) | std::round_toward_zero |
| char16_t (C++11以降) | std::round_toward_zero |
| char32_t (C++11以降) | std::round_toward_zero |
| short | std::round_toward_zero |
| unsigned short | std::round_toward_zero |
| int | std::round_toward_zero |
| unsigned int | std::round_toward_zero |
| long | std::round_toward_zero |
| unsigned long | std::round_toward_zero |
| long long (C++11以降) | std::round_toward_zero |
| unsigned long long (C++11以降) | std::round_toward_zero |
| float | 通常 std::round_to_nearest |
| double | 通常 std::round_to_nearest |
| long double | 通常 std::round_to_nearest |
注記
これらの値は定数であり、 std::fesetround によって行われた丸めモードの変更を反映しません。変更後の値は FLT_ROUNDS または std::fegetround から取得できます。
例
10進数の値
0.1
は2進浮動小数点型で正確に表現できません。IEEE-754
double
で保存する場合、その値は
0x1.9999999999999*2
-4
と
0x1.999999999999a*2
-4
の間に位置します。最も近い表現可能な値に丸めると
0x1.999999999999a*2
-4
となります。
同様に、10進数値
0.3
は、
0x1.3333333333333*2
-2
と
0x1.3333333333334*2
-2
の間に位置し、最近接丸めによって
0x1.3333333333333*2
-2
として格納されます。
#include <iostream> #include <limits> auto print(std::float_round_style frs) { switch (frs) { case std::round_indeterminate: return "丸めスタイルを特定できません"; case std::round_toward_zero: return "ゼロ方向への丸め"; case std::round_to_nearest: return "最も近い表現可能な値への丸め"; case std::round_toward_infinity: return "正の無限大方向への丸め"; case std::round_toward_neg_infinity: return "負の無限大方向への丸め"; } return "不明な丸めスタイル"; } int main() { std::cout << std::hexfloat << "10進数の0.1はdouble型では " << 0.1 << '\n' << "10進数の0.3はdouble型では " << 0.3 << '\n' << print(std::numeric_limits<double>::round_style) << '\n'; }
出力:
The decimal 0.1 is stored in a double as 0x1.999999999999ap-4 The decimal 0.3 is stored in a double as 0x1.3333333333333p-2 Rounding toward nearest representable value
関連項目
|
浮動小数点丸めモードを示す
(列挙型) |