std:: numeric_limits
|
ヘッダーで定義
<limits>
|
||
|
template
<
class
T
>
class
numeric_limits
;
|
||
std::numeric_limits
クラステンプレートは、算術型の様々な特性を問い合わせる標準化された方法を提供します(例えば、型
int
の取り得る最大値は
std
::
numeric_limits
<
int
>
::
max
(
)
です)。
この情報は
std::numeric_limits
テンプレートの特殊化によって提供されます。
standard library
はすべての算術型に対して特殊化を利用可能にしており(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 は、特殊化を持ちません。
|
実装が
integer-class types
を定義する場合、
|
(C++20以降) |
実装は実装固有の型に対して
std::numeric_limits
の特殊化を提供する場合があります:例えばGCCは
std::numeric_limits<__int128>
を提供します。非標準ライブラリはライブラリ提供の型に対して
特殊化を追加
する場合があります。例えば
OpenEXR
は16ビット浮動小数点型に対して
std::numeric_limits<half>
を提供します。
目次 |
テンプレートパラメータ
| T | - | 数値プロパティを取得するための型 |
メンバー定数
|
[static]
|
std::numeric_limits
が特殊化されている型を識別する
(公開静的メンバ定数) |
|
[static]
|
符号付き型を識別する
(公開静的メンバー定数) |
|
[static]
|
整数型を識別する
(公開静的メンバ定数) |
|
[static]
|
正確な型を識別する
(public static member constant) |
|
[static]
|
特殊値「正の無限大」を表現できる浮動小数点型を識別する
(公開静的メンバ定数) |
|
[static]
|
浮動小数点型が特殊値「quiet not-a-number」(NaN) を表現できるかどうかを識別する
(公開静的メンバ定数) |
|
[static]
|
浮動小数点型が特殊値「シグナリング非数」(NaN)を表現できるかどうかを識別する
(公開静的メンバ定数) |
|
[static]
|
浮動小数点型で使用される非正規化スタイルを識別する
(公開静的メンバ定数) |
|
[static]
|
精度損失を不正確な結果ではなく非正規化損失として検出する浮動小数点型を識別する
(public static member constant) |
|
[static]
|
型が使用する丸めスタイルを識別する
(公開静的メンバ定数) |
|
[static]
|
IEC 559/IEEE 754浮動小数点型を識別する
(公開静的メンバ定数) |
|
[static]
|
有限の値の集合を表す型を識別する
(public static member constant) |
|
[static]
|
剰余演算でオーバーフローを処理する型を識別する
(public static member constant) |
|
[static]
|
変更なく表現可能な
radix
進数の桁数
(公開静的メンバ定数) |
|
[static]
|
変更なく表現可能な10進桁数
(公開静的メンバ定数) |
|
[static]
(C++11)
|
この型のすべての値を区別するために必要な10進桁数
(public static member constant) |
|
[static]
|
指定された型の表現で使用される基数または整数ベース
(public static member constant) |
|
[static]
|
基数の最小の負のべき乗で、有効な正規化浮動小数点値であるものに1を加えた値
(公開静的メンバ定数) |
|
[static]
|
正規化浮動小数点値として有効な10の最小負のべき乗
(公開静的メンバ定数) |
|
[static]
|
基数の有効な有限浮動小数点値となる最大の整数乗より1大きい値
(公開静的メンバ定数) |
|
[static]
|
有限の浮動小数点値として有効な10の最大整数乗
(public static member constant) |
|
[static]
|
算術演算がトラップを引き起こす可能性のある型を識別する
(public static member constant) |
|
[static]
|
浮動小数点型が丸めの前にアンダーフローを検出するかどうかを識別する
(public static member constant) |
メンバー関数
|
[static]
|
指定された非浮動小数点型の最小有限値、または指定された浮動小数点型の最小正の正規値を返す
(public static member function) |
|
[static]
(C++11)
|
指定された型の最小有限値を返す(符号付き型では最も負の値、
0
符号なし型では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) |
ヘルパークラス
|
浮動小数点丸めモードを示す
(列挙型) |
|
|
浮動小数点非正規化モードを示す
(列挙型) |
Cライブラリマクロ定数との関係
特殊化
std::numeric_limits<T>
ただし
T
は
|
メンバ | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
min()
|
lowest()
(C++11) |
max()
|
radix
|
||||||||
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 | |||||||
| 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 |
cv修飾型に対する
std::numeric_limits
特殊化が、cv非修飾型に対する対応する特殊化と 同じ動作をするかどうかが不明確だった |
同じ動作を
する |