std::numeric_limits<T>:: digits10
|
static
const
int
digits10
;
|
(C++11まで) | |
|
static
constexpr
int
digits10
;
|
(C++11以降) | |
std::
numeric_limits
<
T
>
::
digits10
の値は、型
T
が変更なく表現できる10進数の桁数です。つまり、この桁数の有効な10進数は、型
T
の値に変換され、再度10進数形式に戻されても、丸めやオーバーフローによる変更を受けません。基数
radix
の型の場合、これは
digits()
(浮動小数点型の場合は
digits
-
1
)に
log
10
(radix)
を乗算し、切り捨てた値です。
標準特殊化
T
|
value of std:: numeric_limits < T > :: digits10 |
| /* 非特殊化 */ | 0 |
| bool | 0 |
| char | std:: numeric_limits < char > :: digits * std:: log10 ( 2 ) |
| signed char | std:: numeric_limits < signed char > :: digits * std:: log10 ( 2 ) |
| unsigned char | std:: numeric_limits < unsigned char > :: digits * std:: log10 ( 2 ) |
| wchar_t | std:: numeric_limits < wchar_t > :: digits * std:: log10 ( 2 ) |
| char8_t (C++20以降) | std:: numeric_limits < char8_t > :: digits * std:: log10 ( 2 ) |
| char16_t (C++11以降) | std:: numeric_limits < char16_t > :: digits * std:: log10 ( 2 ) |
| char32_t (C++11以降) | std:: numeric_limits < char32_t > :: digits * std:: log10 ( 2 ) |
| short | std:: numeric_limits < short > :: digits * std:: log10 ( 2 ) |
| unsigned short | std:: numeric_limits < unsigned short > :: digits * std:: log10 ( 2 ) |
| int | std:: numeric_limits < int > :: digits * std:: log10 ( 2 ) |
| unsigned int | std:: numeric_limits < unsigned int > :: digits * std:: log10 ( 2 ) |
| long | std:: numeric_limits < long > :: digits * std:: log10 ( 2 ) |
| unsigned long | std:: numeric_limits < unsigned long > :: digits * std:: log10 ( 2 ) |
| long long (C++11以降) | std:: numeric_limits < long long > :: digits * std:: log10 ( 2 ) |
| unsigned long long (C++11以降) | std:: numeric_limits < unsigned long long > :: digits * std:: log10 ( 2 ) |
| float | FLT_DIG ( 6 for IEEE float ) |
| double | DBL_DIG ( 15 for IEEE double ) |
| long double | LDBL_DIG ( 18 80ビットIntel long double 用; 33 IEEE quadruple用) |
例
8ビットのバイナリ型は任意の2桁の10進数を正確に表現できますが、3桁の10進数256..999は表現できません。8ビット型の
digits10
の値は2です(
8
*
std::
log10
(
2
)
は2.41)
標準的な32ビットIEEE 754浮動小数点型は24ビットの小数部(23ビットが明示され、1ビットが暗黙的)を持っており、これは7桁の10進数を表現できることを示唆しているかもしれません(
24
*
std::
log10
(
2
)
は7.22)。しかし相対的な丸め誤差は均一ではなく、7桁の10進数を持つ一部の浮動小数点値は32ビットfloatへの変換とその逆変換を経ても維持されません:最小の正の例は
8.589973e9
で、往復変換後は
8.589974e9
となります。これらの丸め誤差は表現における1ビットを超えることはなく、
digits10
は
(
24
-
1
)
*
std::
log10
(
2
)
として計算され、これは6.92です。切り捨てると値6になります。
同様に、16桁の文字列 9007199254740993 はテキスト→倍精度浮動小数点数→テキストの往復変換を保持できず、 9007199254740992 となります:64ビットIEEE 754型のdoubleは、15桁の10進数に対してのみこの往復変換を保証します。
関連項目
|
[static]
(C++11)
|
この型のすべての値を区別するために必要な10進桁数
(public static member constant) |
|
[static]
|
指定された型の表現で使用される基数または整数ベース
(public static member constant) |
|
[static]
|
変更なしで表現可能な
radix
桁数
(public static member constant) |
|
[static]
|
有効な正規化浮動小数点値である基数の最小負のべき乗より1大きい値
(public static member constant) |
|
[static]
|
有効な有限浮動小数点値である基数の最大整数べき乗より1大きい値
(public static member constant) |