名前空間
変種
操作

std::numeric_limits

From cppreference.com
< cpp‎ | types
 
 
ユーティリティライブラリ
言語サポート
型のサポート (基本型、RTTI)
ライブラリ機能検査マクロ (C++20)
プログラムユーティリティ
可変引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (C++20で非推奨)
 
 
 
ヘッダ <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>::digitsstd::numeric_limits<const int>::digits と等価です。

算術型のエイリアス(std::size_tstd::streamsize など)も std::numeric_limits 型特性で調べることができます。

std::complex<T>std::nullptr_t のような非算術的な標準型には、特殊化は存在しません。

実装が何らかの整数クラス型を定義する場合、それらに対しても std::numeric_limits の特殊化が提供されなければなりません。

(C++20以降)

実装は、実装固有の型に対して std::numeric_limits の特殊化を提供することがあります。例:GCCは std::numeric_limits<__int128> を提供します。非標準ライブラリは、ライブラリが提供する型に対して特殊化を追加することがあります。例:OpenEXR は16ビット浮動小数点数型のために std::numeric_limits<half> を提供します。

目次

[編集] テンプレートパラメータ

T - 数値プロパティを取得する型

[編集] メンバ定数

std::numeric_limits が特殊化されている型を識別する
(public static member constant) [編集]
[static]
符号付きの型を識別する
(public static member constant) [編集]
[static]
整数型を識別する
(public static member constant) [編集]
[static]
厳密な型を識別する
(public static member constant) [編集]
特殊な値「正の無限大」を表現できる浮動小数点数型を識別する
(public static member constant) [編集]
特殊な値「quiet not-a-number」(NaN) を表現できる浮動小数点数型を識別する
(public static member constant) [編集]
特殊な値「signaling not-a-number」(NaN) を表現できる浮動小数点数型を識別する
(public static member constant) [編集]
[static]
浮動小数点数型で使用される非正規化のスタイルを識別する
(public static member constant) [編集]
精度の損失を不正確な結果ではなく非正規化損失として検出する浮動小数点数型を識別する
(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) [編集]
有効な正規化された浮動小数点数値である基数の最小の負のべき乗に1を加えたもの
(public static member constant) [編集]
有効な正規化された浮動小数点数値である10の最小の負のべき乗
(public static member constant) [編集]
有効な有限の浮動小数点数値である基数の最大の整数べき乗に1を加えたもの
(public static member constant) [編集]
有効な有限の浮動小数点数値である10の最大の整数べき乗
(public static member constant) [編集]
[static]
算術演算がトラップを引き起こす可能性のある型を識別する
(public static member constant) [編集]
丸め前に微小値 (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) [編集]
与えられた浮動小数点数型の 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修飾されていない型に対する特殊化と同じように振る舞うかどうか不明確だった
それらは
同じ振る舞いをする

[編集] 関連項目

English 日本語 中文(简体) 中文(繁體)