Namespaces
Variants

std::numeric_limits

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

一般ユーティリティ
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)(C++20)(C++20)    
(C++20)
入れ替え (swap) と型操作 (type operations)
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
共通語彙型 (Common vocabulary types)
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
 
ヘッダ <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>;
で定義
template<> class numeric_limits<char16_t>;
(C++20 以上)
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>;

(C++11 以上)std::numeric_limitscv 修飾された型 cv T に対する T の特殊化の各メンバの値は、非修飾型 std::numeric_limits<int>::digits に対する特殊化の対応するメンバの値と等しくなります。例えば、std::numeric_limits<const int>::digits は

と等しくなります。 算術型のエイリアス (std::size_t や std::streamsizestd::numeric_limits など) も

型特性で検査できます。 std::complex<T> や std::nullptr_t などの非算術標準型には特殊化がありません。

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

(C++20 以上)

実装は、実装固有の型に対して std::numeric_limits の特殊化を提供しても構いません (例: GCC は std::numeric_limits<__int128> を提供します)。非標準ライブラリは、ライブラリ提供の型に対して 特殊化を追加しても構いません (例: OpenEXR は 16 ビット浮動小数点型に対して std::numeric_limits<half> を提供します)。

テンプレートパラメータ

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

メンバー定数

std::numeric_limits が特殊化されている型を識別する
(公開静的メンバ定数)
[static]
符号付き型を識別する
(公開静的メンバー定数)
[static]
整数型を識別する
(公開静的メンバ定数)
[static]
正確な型を識別する
(public static member constant)
特殊値「正の無限大」を表現できる浮動小数点型を識別する
(公開静的メンバ定数)
浮動小数点型が特殊値「quiet not-a-number」(NaN) を表現できるかどうかを識別する
(公開静的メンバ定数)
浮動小数点型が特殊値「シグナリング非数」(NaN)を表現できるかどうかを識別する
(公開静的メンバ定数)
[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)
基数の最小の負のべき乗で、有効な正規化浮動小数点値であるものに1を加えた値
(公開静的メンバ定数)
正規化浮動小数点値として有効な10の最小負のべき乗
(公開静的メンバ定数)
基数の有効な有限浮動小数点値となる最大の整数乗より1大きい値
(公開静的メンバ定数)
有限の浮動小数点値として有効な10の最大整数乗
(public static member constant)
[static]
算術演算がトラップを引き起こす可能性のある型を識別する
(public static member constant)
浮動小数点型が丸めの前にアンダーフローを検出するかどうかを識別する
(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)
指定された浮動小数点型のsignaling NaN値を返す
(public static member function)
[static]
指定された浮動小数点型の最小正の非正規化値を返す
(public static member function)

ヘルパークラス

浮動小数点丸めモードを示す
(列挙型)
浮動小数点非正規化モードを示す
(列挙型)

Cライブラリマクロ定数との関係

**翻訳結果:** **説明:** - ``タグ内のC++関数名(`min()`, `lowest()`, `max()`, `radix`)は翻訳対象外 - HTMLタグ・属性は完全に保持 - C++11のバージョン表記もそのまま維持 - フォーマットと構造は原文と完全に同一 **注記**: このHTMLコード内のテキストはすべてC++のキーワードと数値リテラルであり、翻訳対象外の要素です。HTMLタグと属性もすべて元のまま保持されています。 **注記**: このHTMLフラグメントには翻訳すべき自然言語テキストが含まれていません。すべてのテキストは以下のいずれかに該当します: - HTMLタグと属性(翻訳対象外) - ``タグ内のC++コード(翻訳対象外) - C++固有の用語(`char`, `CHAR_MIN`, `CHAR_MAX` - 翻訳対象外) - 数値(`2` - 翻訳対象外) したがって、元のフォーマットを維持したまま出力しています。 **注記**: このHTMLコードは以下の通りです: - HTMLタグ、属性、C++固有の用語(`signed char`、`SCHAR_MIN`、`SCHAR_MAX`)は翻訳されていません - ``内のコードは保持されています - 数値`2`はそのまま維持されています - 元のフォーマットは完全に保存されています **注記**: このHTMLフラグメントには翻訳すべき自然言語テキストが含まれていません。すべてのコンテンツは以下のいずれかに該当します: - C++キーワード(`unsigned`, `char`) - 数値リテラル(`0`, `2`) - C++マクロ名(`UCHAR_MAX`) - HTMLタグと属性 したがって、元のフォーマットを保持したまま出力しています。 **翻訳結果:** このHTML構造内の翻訳対象テキストは以下の通りです: - `wchar_t` (C++の型名 - 翻訳対象外) - `WCHAR_MIN` (C++のマクロ名 - 翻訳対象外) - `WCHAR_MAX` (C++のマクロ名 - 翻訳対象外) - `2` (数値 - 翻訳対象外) 上記のテキストはすべてC++固有の用語または数値であるため、翻訳せずにそのまま保持します。HTMLタグ、属性、およびコード内のテキストはすべて元のまま維持されています。 (注:指定された条件により、HTMLタグ・属性、タグ内のテキスト、C++固有用語は翻訳せず、元のフォーマットを保持しています。翻訳対象となる自然言語テキストが存在しないため、出力は入力と同一となります) **注記**: このHTMLコードには翻訳すべき自然言語テキストが含まれていません。すべての要素は以下の通りです: - C++のキーワード(`char32_t`) - 数値(`0`, `2`) - C++の定数名(`UINT_LEAST32_MAX`) - HTMLタグと属性 これらの要素は翻訳対象外であるため、元のコードは変更せずにそのまま保持されています。 **注記**: このHTMLコード内のテキストは以下の通りです: - `short` (C++のキーワード) - 翻訳対象外 - `SHRT_MIN`, `SHRT_MAX` (C++のマクロ名) - 翻訳対象外 - `2` (数値) - 翻訳対象外 HTMLタグ、属性、C++固有の用語はすべて原文のまま保持されています。翻訳すべき自然言語のテキストは含まれていません。 (注:C++のキーワード「signed short」は翻訳対象外のため、元のテキストを保持しています) **翻訳結果:** **説明:** - HTMLタグ、属性はすべて保持 - ``、`
`、``タグ内のテキストは翻訳対象外(この例では該当なし)
- C++固有の用語(`int`、`INT_MIN`、`INT_MAX`)は翻訳せず保持
- 数値(`2`)は翻訳せず保持
- 元のフォーマットと構造を完全に維持
**注記**: 提供されたHTMLコード内には翻訳対象となる自然言語テキストが含まれていません。すべてのテキストは以下のいずれかに該当します: - HTMLタグと属性 - ``タグ内のC++コード - C++固有の用語(`unsigned long`, `ULONG_MAX`) - 数値リテラル したがって、翻訳作業は必要ありません。元のフォーマットと構造が完全に保持されています。 **注記**: このHTMLフラグメントには翻訳すべきテキストがほとんど含まれていません。以下の要素は翻訳対象外です: - HTMLタグと属性 - ``, `
`, ``タグ内のテキスト(この例では該当なし)
- C++固有の用語(`long long`, `LLONG_MIN`, `LLONG_MAX`)

唯一の数値「2」は数値リテラルであり、翻訳の必要はありません。
**説明:** - HTMLタグと属性はすべてそのまま保持されています - ``内のC++キーワードは翻訳対象外です - `signed long long`は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非修飾型に対する対応する特殊化と
同じ動作をするかどうかが不明確だった
同じ動作を
する

関連項目