名前空間
変種
操作

std::numeric_limits<T>::digits10

提供: cppreference.com
 
 
ユーティリティライブラリ
汎用ユーティリティ
日付と時間
関数オブジェクト
書式化ライブラリ(C++20)
(C++11)
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)
スワップと型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
一般的な語彙の型
(C++11)
(C++17)
(C++17)
(C++17)
(C++17)

初等文字列変換
(C++17)
(C++17)
 
型サポート
型の性質
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(C++20未満)
(C++11)(C++20で非推奨)
(C++11)
型特性定数
メタ関数
(C++17)
定数評価文脈
サポートされている操作
関係と性質の問い合わせ
型変更
型変換
(C++11)
(C++11)
(C++17)
(C++11)(C++20未満)(C++17)
 
 
staticconstint digits10;
(C++11未満)
staticconstexprint digits10
(C++11以上)

std::numeric_limits<T>::digits10 の値は、変化させずに T 型で表現可能な10進数の桁数です。 つまり、この数の有意な10進数の桁を持つ任意の数値は、丸めやオーバーフローによって変化することなく、 T 型の値に変換し、10進数の形式に戻すことができます。 radix 進数の型に対しては、これは digits (浮動小数点型に対しては digits-1) を log
10
(radix)
倍して切り捨てた値です。

[編集]標準の特殊化

Tstd::numeric_limits<T>::digits10 の値
/* 非特殊化 */ 0
bool0
charstd::numeric_limits<char>::digits*std::log10(2)
signedcharstd::numeric_limits<signedchar>::digits*std::log10(2)
unsignedcharstd::numeric_limits<unsignedchar>::digits*std::log10(2)
wchar_tstd::numeric_limits<wchar_t>::digits*std::log10(2)
char8_tstd::numeric_limits<char8_t>::digits*std::log10(2)
char16_tstd::numeric_limits<char16_t>::digits*std::log10(2)
char32_tstd::numeric_limits<char32_t>::digits*std::log10(2)
shortstd::numeric_limits<short>::digits*std::log10(2)
unsignedshortstd::numeric_limits<unsignedshort>::digits*std::log10(2)
intstd::numeric_limits<int>::digits*std::log10(2)
unsignedintstd::numeric_limits<unsignedint>::digits*std::log10(2)
longstd::numeric_limits<long>::digits*std::log10(2)
unsignedlongstd::numeric_limits<unsignedlong>::digits*std::log10(2)
longlongstd::numeric_limits<longlong>::digits*std::log10(2)
unsignedlonglongstd::numeric_limits<unsignedlonglong>::digits*std::log10(2)
floatFLT_DIG/* IEEE float の場合は 6 */
doubleDBL_DIG/* IEEE double の場合は 15 */
longdoubleLDBL_DIG/* 80 ビットの Intel の long double の場合は 18 */

[編集]

8ビットの2進数型はあらゆる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ビット浮動小数点への変換と戻りを生き延びることができません。 最も小さな正の例は 8.589973e9 であり、往復後は 8.589974e9 になります。 これらの丸め誤差は表現内の1ビットを超えることはなく、 digits10(24-1)*std::log10(2)=6.92 として計算できます。 切り捨てると値 6 が結果となります。

同様に、16桁の文字列 9007199254740993 はテキスト→double→テキストの往復を生き延びることはできず、 9007199254740992 になります。 64ビット IEEE 754 の型 double は15桁の10進数に対してのみこの往復を保証します。

[編集]関連項目

[静的]
指定された型を表現するために使用される基数
(パブリック静的メンバ定数)[edit]
[静的]
変化させずに表現可能な radix 進数の桁数
(パブリック静的メンバ定数)[edit]
[静的]
有効な正規化浮動小数点値を構成する radix を底とした最も小さな負の指数より1大きい数
(パブリック静的メンバ定数)[edit]
[静的]
有効な有限の浮動小数点値を構成する radix を底とした最も大きな指数より1大きい数
(パブリック静的メンバ定数)[edit]
close