名前空間
変種
操作

std::numeric_limits

提供: cppreference.com
< cpp‎ | types
 
 
 
型サポート
基本的な型
基本型
固定幅の整数型 (C++11)
数値の限界
numeric_limits
C の数値限界インタフェース
実行時型情報
型特性
型カテゴリ
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
型プロトタイプ
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(C++20以前)
(C++11)(C++20で非推奨)
(C++11)
型特性定数
メタ関数
(C++17)
エンディアン
(C++20)
サポートされている操作
関係と性質の問い合わせ
(C++11)
(C++11)
型変更
(C++11)(C++11)(C++11)
型変換
(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<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]
[static]
符号付きの型を識別します
(パブリック静的メンバ定数) [edit]
[static]
整数型を識別します
(パブリック静的メンバ定数) [edit]
[static]
正確な型を識別します
(パブリック静的メンバ定数) [edit]
特殊な値「正の無限大」を表現可能な浮動小数点型を識別します
(パブリック静的メンバ定数) [edit]
特殊な値「quiet NaN」を表現可能な浮動小数点型を識別します
(パブリック静的メンバ定数) [edit]
特殊な値「signaling NaN」を表現可能な浮動小数点型を識別します
(パブリック静的メンバ定数) [edit]
[static]
浮動小数点型によって使用される非正規化形式を識別します
(パブリック静的メンバ定数) [edit]
精度の損失を不正確な結果ではなく非正規化損失として検出する浮動小数点型を識別します
(パブリック静的メンバ定数) [edit]
[static]
型によって使用される丸めのスタイルを識別します
(パブリック静的メンバ定数) [edit]
[static]
IEC 559/IEEE 754 の浮動小数点型を識別します
(パブリック静的メンバ定数) [edit]
[static]
値の有限集合を表現する型を識別します
(パブリック静的メンバ定数) [edit]
[static]
オーバーフローをモジュロ演算によって処理する型を識別します
(パブリック静的メンバ定数) [edit]
[static]
変化させずに表現可能な radix 進数の桁数
(パブリック静的メンバ定数) [edit]
[static]
変化させずに表現可能な10進数の桁数
(パブリック静的メンバ定数) [edit]
[static] (C++11)
この型のすべての値を区別するため必要な10進数の桁数
(パブリック静的メンバ定数) [edit]
[static]
指定された型を表現するために使用される基数
(パブリック静的メンバ定数) [edit]
有効な正規化浮動小数点値を構成する radix を底とした最も小さな負の指数より1大きい数
(パブリック静的メンバ定数) [edit]
有効な正規化浮動小数点値を構成する10を底とした最も小さな負の指数
(パブリック静的メンバ定数) [edit]
有効な有限の浮動小数点値を構成する radix を底とした最も大きな指数より1大きい数
(パブリック静的メンバ定数) [edit]
有効な有限の浮動小数点値を構成する10を底とした最も大きな指数
(パブリック静的メンバ定数) [edit]
[static]
算術演算がトラップを発生することが可能な型を識別します
(パブリック静的メンバ定数) [edit]
丸めの前に小ささを検出する浮動小数点型を識別します
(パブリック静的メンバ定数) [edit]

[編集] メンバ関数

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

[編集] ヘルパークラス

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

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

特殊化 メンバ
min() lowest()
(C++11)
max() epsilon() digits digits10 min_exponent min_exponent10 max_exponent max_exponent10 radix
numeric_limits< bool > 2
numeric_limits< char > CHAR_MIN CHAR_MIN CHAR_MAX 2
numeric_limits< signed char > SCHAR_MIN SCHAR_MIN SCHAR_MAX 2
numeric_limits< unsigned char > 0 0 UCHAR_MAX 2
numeric_limits< wchar_t > WCHAR_MIN WCHAR_MIN WCHAR_MAX 2
numeric_limits< char16_t > 0 0 UINT_LEAST16_MAX 2
numeric_limits< char32_t > 0 0 UINT_LEAST32_MAX 2
numeric_limits< short > SHRT_MIN SHRT_MIN SHRT_MAX 2
numeric_limits< signed short >
numeric_limits< unsigned short > 0 0 USHRT_MAX 2
numeric_limits< int > INT_MIN INT_MIN INT_MAX 2
numeric_limits< signed int >
numeric_limits< unsigned int > 0 0 UINT_MAX 2
numeric_limits< long > LONG_MIN LONG_MIN LONG_MAX 2
numeric_limits< signed long >
numeric_limits< unsigned long > 0 0 ULONG_MAX 2
numeric_limits< long long > LLONG_MIN LLONG_MIN LLONG_MAX 2
numeric_limits< signed long long >
numeric_limits< unsigned long long > 0 0 ULLONG_MAX 2
numeric_limits< float > FLT_MIN -FLT_MAX FLT_MAX FLT_EPSILON FLT_MANT_DIG FLT_DIG FLT_MIN_EXP FLT_MIN_10_EXP FLT_MAX_EXP FLT_MAX_10_EXP FLT_RADIX
numeric_limits< double > DBL_MIN -DBL_MAX DBL_MAX DBL_EPSILON DBL_MANT_DIG DBL_DIG DBL_MIN_EXP DBL_MIN_10_EXP DBL_MAX_EXP DBL_MAX_10_EXP FLT_RADIX
numeric_limits< long double > LDBL_MIN -LDBL_MAX LDBL_MAX LDBL_EPSILON LDBL_MANT_DIG LDBL_DIG LDBL_MIN_EXP LDBL_MIN_10_EXP LDBL_MAX_EXP LDBL_MAX_10_EXP FLT_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

[編集] 関連項目