Namespaces
Variants

std::numeric_limits<T>:: digits10

From cppreference.net
Utilities library
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) を乗算し、切り捨てた値です。

標準特殊化

HTMLタグ、属性、および` `タグ内のC++コードは翻訳せず、元のフォーマットを保持しました。C++固有の用語(`unsigned int`、`std::numeric_limits`、`digits`、`std::log10`など)は翻訳していません。 **注記**: 提供されたHTMLコードはC++のコードスニペットを含んでおり、指示に従って以下の点を厳守しました: - HTMLタグと属性は一切翻訳せず - ` `タグ内のC++コードは翻訳せず - C++固有の用語(`unsigned long`, `std::numeric_limits`, `digits`, `std::log10`など)は翻訳せず - 元のフォーマットを完全に保持 翻訳が必要なテキスト部分が存在しないため、HTML構造とC++コードはそのまま保持されています。
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)
有効な正規化浮動小数点値である基数の最小負のべき乗より1大きい値
(public static member constant)
有効な有限浮動小数点値である基数の最大整数べき乗より1大きい値
(public static member constant)