std::numeric_limits<T>::round_style
提供: cppreference.com
< cpp | types | numeric limits
staticconststd::float_round_style round_style; | (C++11未満) | |
staticconstexprstd::float_round_style round_style; | (C++11以上) | |
std::numeric_limits<T>::round_style の値は、正確に表現可能な T
の値のいずれかでない値がその型のオブジェクトに格納されるときに浮動小数点型 T
によって使用される丸めスタイルを識別します。
目次 |
[編集]標準の特殊化
T | std::numeric_limits<T>::round_style の値 |
/* 非特殊化 */ | std::round_toward_zero |
bool | std::round_toward_zero |
char | std::round_toward_zero |
signedchar | std::round_toward_zero |
unsignedchar | std::round_toward_zero |
wchar_t | std::round_toward_zero |
char8_t | std::round_toward_zero |
char16_t | std::round_toward_zero |
char32_t | std::round_toward_zero |
short | std::round_toward_zero |
unsignedshort | std::round_toward_zero |
int | std::round_toward_zero |
unsignedint | std::round_toward_zero |
long | std::round_toward_zero |
unsignedlong | std::round_toward_zero |
longlong | std::round_toward_zero |
unsignedlonglong | std::round_toward_zero |
float | 通常は std::round_to_nearest |
double | 通常は std::round_to_nearest |
longdouble | 通常は std::round_to_nearest |
[編集]ノート
これらの値は定数であり、 std::fesetround による丸めモードの変更を反映しません。 変更された値は FLT_ROUNDS または std::fegetround で取得できます。
[編集]例
10進数の値 0.1 は2進浮動小数点型で表現することができません。 IEEE-745 の double に格納されるとき、その値は 0x1.9999999999999*2-4
と 0x1.999999999999a*2-4
の間になります。 最も近い表現可能な値に丸めると、結果は 0x1.999999999999a*2-4
になります。
同様に、 0x1.3333333333333*2-2
と 0x1.3333333333334*2-2
の間である10進数の値 0.3 は、最も近い値に丸めると 0x1.3333333333333*2-2
として格納されます。
Run this code
#include <iostream>#include <limits>int main(){std::cout<<std::hexfloat<<"The decimal 0.1 is stored in a double as "<<0.1<<'\n'<<"The decimal 0.3 is stored in a double as "<<0.3<<'\n'<<"The rounding style is "<<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 The rounding style is 1
[編集]関連項目
浮動小数点の丸めモードを表します (列挙) |