std::numeric_limits
| ヘッダ <limits> で定義 |
||
| template< class T > class numeric_limits; |
||
クラステンプレート std::numeric_limits は、算術型のさまざまなプロパティを問い合わせるための標準的な方法を提供します(例:型 int の最大値は std::numeric_limits<int>::max() です)。
この情報は std::numeric_limits テンプレートの特殊化を通じて提供されます。標準ライブラリは、すべての算術型に対する特殊化を提供します(cv修飾されていない算術型の特殊化のみをリストしています)。
| ヘッダ <limits> で定義 |
||
| template<> class numeric_limits<bool>; |
||
| template<> class numeric_limits<char>; |
||
| template<> class numeric_limits<signed char>; |
||
| template<> class numeric_limits<unsigned char>; |
||
| template<> class numeric_limits<wchar_t>; |
||
| template<> class numeric_limits<char8_t>; |
(C++20以降) | |
| template<> class numeric_limits<char16_t>; |
(C++11以降) | |
| template<> class numeric_limits<char32_t>; |
(C++11以降) | |
| template<> class numeric_limits<short>; |
||
| template<> class numeric_limits<unsigned short>; |
||
| template<> class numeric_limits<int>; |
||
| template<> class numeric_limits<unsigned int>; |
||
| template<> class numeric_limits<long>; |
||
| template<> class numeric_limits<unsigned long>; |
||
| template<> class numeric_limits<long long>; |
(C++11以降) | |
| template<> class numeric_limits<unsigned long long>; |
(C++11以降) | |
| template<> class numeric_limits<float>; |
||
| template<> class numeric_limits<double>; |
||
| template<> class numeric_limits<long double>; |
||
cv修飾された型 cv T に対する std::numeric_limits の特殊化の各メンバの値は、修飾されていない型 T に対する特殊化の対応するメンバの値と等しくなります。例えば、std::numeric_limits<int>::digits は std::numeric_limits<const int>::digits と等価です。
算術型のエイリアス(std::size_t や std::streamsize など)も std::numeric_limits 型特性で調べることができます。
std::complex<T> や std::nullptr_t のような非算術的な標準型には、特殊化は存在しません。
|
実装が何らかの整数クラス型を定義する場合、それらに対しても |
(C++20以降) |
実装は、実装固有の型に対して std::numeric_limits の特殊化を提供することがあります。例:GCCは std::numeric_limits<__int128> を提供します。非標準ライブラリは、ライブラリが提供する型に対して特殊化を追加することがあります。例:OpenEXR は16ビット浮動小数点数型のために std::numeric_limits<half> を提供します。
目次 |
[編集] テンプレートパラメータ
| T | - | 数値プロパティを取得する型 |
[編集] メンバ定数
| [static] |
std::numeric_limits が特殊化されている型を識別する (public static member constant) |
| [static] |
符号付きの型を識別する (public static member constant) |
| [static] |
整数型を識別する (public static member constant) |
| [static] |
厳密な型を識別する (public static member constant) |
| [static] |
特殊な値「正の無限大」を表現できる浮動小数点数型を識別する (public static member constant) |
| [static] |
特殊な値「quiet not-a-number」(NaN) を表現できる浮動小数点数型を識別する (public static member constant) |
| [static] |
特殊な値「signaling not-a-number」(NaN) を表現できる浮動小数点数型を識別する (public static member constant) |
| [static] |
浮動小数点数型で使用される非正規化のスタイルを識別する (public static member constant) |
| [static] |
精度の損失を不正確な結果ではなく非正規化損失として検出する浮動小数点数型を識別する (public static member constant) |
| [static] |
型で使用される丸めスタイルを識別する (public static member constant) |
| [static] |
IEC 559/IEEE 754 浮動小数点数型を識別する (public static member constant) |
| [static] |
有限の値の集合を表現する型を識別する (public static member constant) |
| [static] |
オーバーフローを剰余演算で処理する型を識別する (public static member constant) |
| [static] |
変更なしで表現できる radix の桁数(public static member constant) |
| [static] |
変更なしで表現できる10進数の桁数 (public static member constant) |
| [static] (C++11) |
この型のすべての値を区別するために必要な10進数の桁数 (public static member constant) |
| [static] |
与えられた型の表現で使用される基数または整数の底 (public static member constant) |
| [static] |
有効な正規化された浮動小数点数値である基数の最小の負のべき乗に1を加えたもの (public static member constant) |
| [static] |
有効な正規化された浮動小数点数値である10の最小の負のべき乗 (public static member constant) |
| [static] |
有効な有限の浮動小数点数値である基数の最大の整数べき乗に1を加えたもの (public static member constant) |
| [static] |
有効な有限の浮動小数点数値である10の最大の整数べき乗 (public static member constant) |
| [static] |
算術演算がトラップを引き起こす可能性のある型を識別する (public static member constant) |
| [static] |
丸め前に微小値 (tinyness) を検出する浮動小数点数型を識別する (public static member constant) |
[編集] メンバ関数
| [static] |
与えられた非浮動小数点数型の最小の有限値を返すか、与えられた浮動小数点数型の最小の正の正規化された値を返す (public static member function) |
| [static] (C++11) |
与えられた型の最小の有限値を返す。すなわち、符号付き型の場合は最も負の値、符号なし型の場合は 0 (public static member function) |
| [static] |
与えられた型の最大の有限値を返す (public static member function) |
| [static] |
1.0 と与えられた浮動小数点数型で次に表現可能な値との差を返す(public static member function) |
| [static] |
与えられた浮動小数点数型の最大丸め誤差を返す (public static member function) |
| [static] |
与えられた浮動小数点数型の正の無限大の値を返す (public static member function) |
| [static] |
与えられた浮動小数点数型の quiet NaN 値を返す (public static member function) |
| [static] |
与えられた浮動小数点数型の signaling NaN 値を返す (public static member function) |
| [static] |
与えられた浮動小数点数型の最小の正の非正規化値を返す (public static member function) |
[編集] ヘルパークラス
| 浮動小数点数の丸めモードを示す (enum) | |
| 浮動小数点数の非正規化モードを示す (enum) |
[編集] Cライブラリのマクロ定数との関係
特殊化std::numeric_limits<T>T が以下の場合 |
メンバ | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
min()
|
lowest()(C++11) |
max()
|
radix
| ||||||||
| bool | false | false | true | 2 | |||||||
| char | CHAR_MIN | CHAR_MIN | CHAR_MAX | 2 | |||||||
| signed char | SCHAR_MIN | SCHAR_MIN | SCHAR_MAX | 2 | |||||||
| unsigned char | 0 | 0 | UCHAR_MAX | 2 | |||||||
| wchar_t | WCHAR_MIN | WCHAR_MIN | WCHAR_MAX | 2 | |||||||
| char8_t | 0 | 0 | UCHAR_MAX | 2 | |||||||
| char16_t | 0 | 0 | UINT_LEAST16_MAX | 2 | |||||||
| char32_t | 0 | 0 | UINT_LEAST32_MAX | 2 | |||||||
| short | SHRT_MIN | SHRT_MIN | SHRT_MAX | 2 | |||||||
| signed short | |||||||||||
| unsigned short | 0 | 0 | USHRT_MAX | 2 | |||||||
| int | INT_MIN | INT_MIN | INT_MAX | 2 | |||||||
| signed int | |||||||||||
| unsigned int | 0 | 0 | UINT_MAX | 2 | |||||||
| long | LONG_MIN | LONG_MIN | LONG_MAX | 2 | |||||||
| signed long | |||||||||||
| unsigned long | 0 | 0 | ULONG_MAX | 2 | |||||||
| long long | LLONG_MIN | LLONG_MIN | LLONG_MAX | 2 | |||||||
| signed long long | |||||||||||
| unsigned long long | 0 | 0 | ULLONG_MAX | 2 | |||||||
特殊化std::numeric_limits<T>T が以下の場合 |
メンバ | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
denorm_min()
|
min()
|
lowest()(C++11) |
max()
|
epsilon()
|
digits
|
digits10
| |||||
| float | FLT_TRUE_MIN | FLT_MIN | -FLT_MAX | FLT_MAX | FLT_EPSILON | FLT_MANT_DIG | FLT_DIG | ||||
| double | DBL_TRUE_MIN | DBL_MIN | -DBL_MAX | DBL_MAX | DBL_EPSILON | DBL_MANT_DIG | DBL_DIG | ||||
| long double | LDBL_TRUE_MIN | LDBL_MIN | -LDBL_MAX | LDBL_MAX | LDBL_EPSILON | LDBL_MANT_DIG | LDBL_DIG | ||||
特殊化std::numeric_limits<T>T が以下の場合 |
メンバ (続き) | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
min_exponent
|
min_exponent10
|
max_exponent
|
max_exponent10
|
radix
| |||||||
| float | FLT_MIN_EXP | FLT_MIN_10_EXP | FLT_MAX_EXP | FLT_MAX_10_EXP | FLT_RADIX | ||||||
| double | DBL_MIN_EXP | DBL_MIN_10_EXP | DBL_MAX_EXP | DBL_MAX_10_EXP | FLT_RADIX | ||||||
| long double | LDBL_MIN_EXP | LDBL_MIN_10_EXP | LDBL_MAX_EXP | LDBL_MAX_10_EXP | FLT_RADIX | ||||||
[編集] 例
#include <iostream> #include <limits> int main() { std::cout << "type\t│ lowest()\t│ min()\t\t│ max()\n" << "bool\t│ " << std::numeric_limits<bool>::lowest() << "\t\t│ " << std::numeric_limits<bool>::min() << "\t\t│ " << std::numeric_limits<bool>::max() << '\n' << "uchar\t│ " << +std::numeric_limits<unsigned char>::lowest() << "\t\t│ " << +std::numeric_limits<unsigned char>::min() << "\t\t│ " << +std::numeric_limits<unsigned char>::max() << '\n' << "int\t│ " << std::numeric_limits<int>::lowest() << "\t│ " << std::numeric_limits<int>::min() << "\t│ " << std::numeric_limits<int>::max() << '\n' << "float\t│ " << std::numeric_limits<float>::lowest() << "\t│ " << std::numeric_limits<float>::min() << "\t│ " << std::numeric_limits<float>::max() << '\n' << "double\t│ " << std::numeric_limits<double>::lowest() << "\t│ " << std::numeric_limits<double>::min() << "\t│ " << std::numeric_limits<double>::max() << '\n'; }
実行結果の例
type │ lowest() │ min() │ max() bool │ 0 │ 0 │ 1 uchar │ 0 │ 0 │ 255 int │ -2147483648 │ -2147483648 │ 2147483647 float │ -3.40282e+38 │ 1.17549e-38 │ 3.40282e+38 double │ -1.79769e+308 │ 2.22507e-308 │ 1.79769e+308
[編集] 欠陥報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 201 | C++98 | すべての基本型に対して特殊化を提供する必要がある | 非算術型は除外された |
| LWG 559 | C++98 | std::numeric_limitsのcv修飾された型に対する特殊化が、 対応するcv修飾されていない型に対する特殊化と同じように振る舞うかどうか不明確だった |
それらは 同じ振る舞いをする |