std::numeric_limits
Szablon:cpp/types/numeric limits/navbar
Zdefiniowane w nagłówku <limits> | ||
template<class T >class numeric_limits; | ||
Szablon klasy numeric_limits dostarcza standardowego sposobu do uzyskiwania informacji różnych właściwościach typów arytmetycznych (np. największa możliwa wartość typu int to std::numeric_limits<int>::max()).
Te informacje są przechowywane przez konkretne specjalizacje szablonu klasy numeric_limits. Biblioteka standardowa C++ dostarcza gotowych specjalizacji dla wszystkich typów arytmetycznych:
Zdefiniowane w nagłówku <limits> | ||
template<>class numeric_limits<bool>; template<>class numeric_limits<char>; | ||
Dodatkowo, istnieją specjalizacje, dla wersji z kwalifikatorami cv każdego typu arytmetycznego, które są identyczne do specjalizacji bez kwalifikatorów, np. std::numeric_limits<const int>, std::numeric_limits<volatile int>, i std::numeric_limits<const volatile int> są dostarczone i równoważne z std::numeric_limits<int>.
Aliasy ze standardowej biblioteki dla typów arytmetycznych (takich jak np. std::size_t czy std::streamsize) również mogą być sprawdzane przy użyciu std::numeric_limits.
Nie-arytmetyczne typy standardowe, takie jak std::complex<T> czy std::nullptr_t nie mają specjalizacji.
Różne implementacje mogą dostarczać specjalizacji std::numeric_limits dla typów zdefiniowanych dla danej implementacji: np. GCC dostarcza specjalizacji std::numeric_limits<__int128>. Niestandardowe biblioteki moga dodawać specjalizacje dla typów dostarczanych przez te biblioteki, np. OpenEXR dostarcza std::numeric_limits<half> dla 16 bitowego typu zmiennoprzecinkowego.
Spis treści |
[edytuj]Parametry szablonu
T | - | typ, dla którego będą sprawdzane właściwości |
[edytuj]Stałe składowe
[edytuj]Metody
[static] | zwraca różnicę między 1.0 i następną, możliwą do precyzyjnej reprezentacji wartości liczby zmiennoprzecinkowej (publiczna statyczna metoda) |
[static] | zwraca najmniejszą dodatnią wartość podnormalną danego typu zmiennoprzecinkowego (publiczna statyczna metoda) |
[edytuj]Klasy pomocnicze
[edytuj]Związek z makrami z biblioteki C
Specjalizacja | Członkowie | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
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< signedchar > | SCHAR_MIN | SCHAR_MIN | SCHAR_MAX | 2 | |||||||
numeric_limits< unsignedchar > | 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< signedshort > | |||||||||||
numeric_limits< unsignedshort > | 0 | 0 | USHRT_MAX | 2 | |||||||
numeric_limits< int > | INT_MIN | INT_MIN | INT_MAX | 2 | |||||||
numeric_limits< signedint > | |||||||||||
numeric_limits< unsignedint > | 0 | 0 | UINT_MAX | 2 | |||||||
numeric_limits< long > | LONG_MIN | LONG_MIN | LONG_MAX | 2 | |||||||
numeric_limits< signedlong > | |||||||||||
numeric_limits< unsignedlong > | 0 | 0 | ULONG_MAX | 2 | |||||||
numeric_limits< longlong > | LLONG_MIN | LLONG_MIN | LLONG_MAX | 2 | |||||||
numeric_limits< signedlonglong > | |||||||||||
numeric_limits< unsignedlonglong > | 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< longdouble > | 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 |
[edytuj]Przykład
#include <limits>#include <iostream> int main(){std::cout<<"type\tnajmniejsza\tnajwiekszat\n";std::cout<<"int\t"<< std::numeric_limits<int>::lowest()<<'\t'<< std::numeric_limits<int>::max()<<'\n';std::cout<<"float\t"<< std::numeric_limits<float>::lowest()<<'\t'<< std::numeric_limits<float>::max()<<'\n';std::cout<<"double\t"<< std::numeric_limits<double>::lowest()<<'\t'<< std::numeric_limits<double>::max()<<'\n';}
Możliwy wynik:
type najmniejsza najwieksza int -2147483648 2147483647 float -3.40282e+38 3.40282e+38 double -1.79769e+308 1.79769e+308