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