名前空間
変種
操作

std::numeric_limits

提供: cppreference.com
< cpp‎ | types
 
 
ユーティリティライブラリ
 
型サポート
型の性質
(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)
 
 
ヘッダ <limits> で定義
template< class T > class numeric_limits;

numeric_limits クラスは算術型の様々な特性を問い合わせる標準化された方法を提供するクラステンプレートです (例えば int 型の最大値は std::numeric_limits<int>::max() です)。

この情報は numeric_limits テンプレートの特殊化によって提供されます。 標準ライブラリはすべての算術型に対する特殊化を提供しています。

ヘッダ <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<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>;
template<> class numeric_limits<unsigned long long>;
template<> class numeric_limits<float>;
template<> class numeric_limits<double>;

template<> class numeric_limits<long double>;
template<> class numeric_limits<char8_t>;
(C++20以上)
template<> class numeric_limits<char16_t>;
template<> class numeric_limits<char32_t>;
(C++11以上)

さらに、各々の算術型のすべての cv 修飾されたバージョンに対する特殊化も存在します (無修飾の特殊化と同一です)。 例えば std::numeric_limits<const int>, std::numeric_limits<volatile int>, std::numeric_limits<const volatile int> が提供され、 std::numeric_limits<int> と同等です。

算術型のエイリアスである標準ライブラリ型 (std::size_tstd::streamsize など) もまた std::numeric_limits 型特性で検査することができます。

std::complex<T>std::nullptr_t のような算術でない標準型に対する特殊化はありません。

処理系は、処理系固有の型に対する std::numeric_limits の特殊化を提供する場合もあります。 例えば、 GCC は std::numeric_limits<__int128> を提供します。 非標準のライブラリが、そのライブラリが提供する型に対して特殊化を追加する場合もあります。 例えば OpenEXR は16ビット浮動小数点型に対して std::numeric_limits<half> を提供します。

目次

[編集] テンプレート引数

T-数値特性を取得したい型

[編集] メンバ定数

std::numeric_limits が特殊化されている型を識別します
(パブリック静的メンバ定数) [edit]
[静的]
符号付きの型を識別します
(パブリック静的メンバ定数) [edit]
[静的]
整数型を識別します
(パブリック静的メンバ定数) [edit]
[静的]
正確な型を識別します
(パブリック静的メンバ定数) [edit]
[静的]
特殊な値「正の無限大」を表現可能な浮動小数点型を識別します
(パブリック静的メンバ定数) [edit]
特殊な値「quiet NaN」を表現可能な浮動小数点型を識別します
(パブリック静的メンバ定数) [edit]
特殊な値「signaling NaN」を表現可能な浮動小数点型を識別します
(パブリック静的メンバ定数) [edit]
[静的]
浮動小数点型によって使用される非正規化形式を識別します
(パブリック静的メンバ定数) [edit]
精度の損失を不正確な結果ではなく非正規化損失として検出する浮動小数点型を識別します
(パブリック静的メンバ定数) [edit]
[静的]
型によって使用される丸めのスタイルを識別します
(パブリック静的メンバ定数) [edit]
[静的]
IEC 559/IEEE 754 の浮動小数点型を識別します
(パブリック静的メンバ定数) [edit]
[静的]
値の有限集合を表現する型を識別します
(パブリック静的メンバ定数) [edit]
[静的]
オーバーフローをモジュロ演算によって処理する型を識別します
(パブリック静的メンバ定数) [edit]
[静的]
変化させずに表現可能な radix 進数の桁数
(パブリック静的メンバ定数) [edit]
[静的]
変化させずに表現可能な10進数の桁数
(パブリック静的メンバ定数) [edit]
[静的] (C++11)
この型のすべての値を区別するため必要な10進数の桁数
(パブリック静的メンバ定数) [edit]
[静的]
指定された型を表現するために使用される基数
(パブリック静的メンバ定数) [edit]
[静的]
有効な正規化浮動小数点値を構成する radix を底とした最も小さな負の指数より1大きい数
(パブリック静的メンバ定数) [edit]
有効な正規化浮動小数点値を構成する10を底とした最も小さな負の指数
(パブリック静的メンバ定数) [edit]
[静的]
有効な有限の浮動小数点値を構成する radix を底とした最も大きな指数より1大きい数
(パブリック静的メンバ定数) [edit]
有効な有限の浮動小数点値を構成する10を底とした最も大きな指数
(パブリック静的メンバ定数) [edit]
[静的]
算術演算がトラップを発生することが可能な型を識別します
(パブリック静的メンバ定数) [edit]
丸めの前に小ささを検出する浮動小数点型を識別します
(パブリック静的メンバ定数) [edit]

[編集] メンバ関数

[静的]
指定された型の最も小さな有限の値を返します
(パブリック静的メンバ関数) [edit]
[静的] (C++11)
指定された型の最も低い有限の値を返します
(パブリック静的メンバ関数) [edit]
[静的]
指定された型の最も大きな有限の値を返します
(パブリック静的メンバ関数) [edit]
[静的]
指定された浮動小数点型の 1.0 とその次の表現可能な値の差を返します
(パブリック静的メンバ関数) [edit]
[静的]
指定された浮動小数点型の最も大きな丸め誤差を返します
(パブリック静的メンバ関数) [edit]
[静的]
指定された浮動小数点型の正の無限大の値を返します
(パブリック静的メンバ関数) [edit]
[静的]
指定された浮動小数点型の quiet NaN の値を返します
(パブリック静的メンバ関数) [edit]
指定された浮動小数点型の signaling NaN の値を返します
(パブリック静的メンバ関数) [edit]
[静的]
指定された浮動小数点型の最も小さな正の非正規化数を返します
(パブリック静的メンバ関数) [edit]

[編集] ヘルパークラス

浮動小数点の丸めモードを表します
(列挙) [edit]
浮動小数点の非正規化モードを表します
(列挙) [edit]

[編集] C ライブラリのマクロ定数との関係

特殊化メンバ
min()lowest()
(C++11)
max()epsilon()digitsdigits10min_exponentmin_exponent10max_exponentmax_exponent10radix
numeric_limits<bool>2
numeric_limits<char>CHAR_MINCHAR_MINCHAR_MAX2
numeric_limits<signed char>SCHAR_MINSCHAR_MINSCHAR_MAX2
numeric_limits<unsigned char>00UCHAR_MAX2
numeric_limits<wchar_t>WCHAR_MINWCHAR_MINWCHAR_MAX2
numeric_limits<char8_t>00UCHAR_MAX2
numeric_limits<char16_t>00UINT_LEAST16_MAX2
numeric_limits<char32_t>00UINT_LEAST32_MAX2
numeric_limits<short>SHRT_MINSHRT_MINSHRT_MAX2
numeric_limits<signed short>
numeric_limits<unsigned short>00USHRT_MAX2
numeric_limits<int>INT_MININT_MININT_MAX2
numeric_limits<signed int>
numeric_limits<unsigned int>00UINT_MAX2
numeric_limits<long>LONG_MINLONG_MINLONG_MAX2
numeric_limits<signed long>
numeric_limits<unsigned long>00ULONG_MAX2
numeric_limits<long long>LLONG_MINLLONG_MINLLONG_MAX2
numeric_limits<signed long long>
numeric_limits<unsigned long long>00ULLONG_MAX2
numeric_limits<float>FLT_MIN-FLT_MAXFLT_MAXFLT_EPSILONFLT_MANT_DIGFLT_DIGFLT_MIN_EXPFLT_MIN_10_EXPFLT_MAX_EXPFLT_MAX_10_EXPFLT_RADIX
numeric_limits<double>DBL_MIN-DBL_MAXDBL_MAXDBL_EPSILONDBL_MANT_DIGDBL_DIGDBL_MIN_EXPDBL_MIN_10_EXPDBL_MAX_EXPDBL_MAX_10_EXPFLT_RADIX
numeric_limits<long double>LDBL_MIN-LDBL_MAXLDBL_MAXLDBL_EPSILONLDBL_MANT_DIGLDBL_DIGLDBL_MIN_EXPLDBL_MIN_10_EXPLDBL_MAX_EXPLDBL_MAX_10_EXPFLT_RADIX

[編集]

#include <limits>
#include <iostream>
 
int main() 
{
    std::cout << "type\tlowest()\tmin()\t\tmax()\n\n";
 
    std::cout << "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';
    std::cout << "int\t"
              << std::numeric_limits<int>::lowest() << '\t'
              << std::numeric_limits<int>::min() << '\t'
              << std::numeric_limits<int>::max() << '\n';
    std::cout << "float\t"
              << std::numeric_limits<float>::lowest() << '\t'
              << std::numeric_limits<float>::min() << '\t'
              << std::numeric_limits<float>::max() << '\n';
    std::cout << "double\t"
              << std::numeric_limits<double>::lowest() << '\t'
              << std::numeric_limits<double>::min() << '\t'
              << std::numeric_limits<double>::max() << '\n';
}

出力例:

type	lowest()	min()		max()
 
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

[編集] 関連項目