std::numeric_limits
Szablon:cpp/types/numeric limits/navbar
<tbody> </tbody>| 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:
<tbody> </tbody>| Zdefiniowane w nagłówku <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<char16_t>; // C++11 feature template<> class numeric_limits<char32_t>; // C++11 feature 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>; |
||
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.
Parametry szablonu
| T | - | typ, dla którego będą sprawdzane właściwości |
Stałe składowe
Szablon:cpp/types/numeric limits/dsc is specializedSzablon:cpp/types/numeric limits/dsc is signedSzablon:cpp/types/numeric limits/dsc is integerSzablon:cpp/types/numeric limits/dsc is exactSzablon:cpp/types/numeric limits/dsc has infinitySzablon:cpp/types/numeric limits/dsc has quiet NaNSzablon:cpp/types/numeric limits/dsc has signaling NaNSzablon:cpp/types/numeric limits/dsc has denormSzablon:cpp/types/numeric limits/dsc has denorm lossSzablon:cpp/types/numeric limits/dsc round styleSzablon:cpp/types/numeric limits/dsc is iec559Szablon:cpp/types/numeric limits/dsc is boundedSzablon:cpp/types/numeric limits/dsc is moduloSzablon:cpp/types/numeric limits/dsc max digits10Szablon:cpp/types/numeric limits/dsc radixSzablon:cpp/types/numeric limits/dsc min exponentSzablon:cpp/types/numeric limits/dsc min exponent10Szablon:cpp/types/numeric limits/dsc max exponentSzablon:cpp/types/numeric limits/dsc max exponent10Szablon:cpp/types/numeric limits/dsc trapsSzablon:cpp/types/numeric limits/dsc tinyness before[static] |
liczba znaczących cyfr, które mogą być reprezentowane bez zmian (statyczne stałe pole) |
[static] |
ilość cyfr (w systemie dziesiętnym), które mogą być reprezentowane bez zmian (statyczne stałe pole) |
Metody
Szablon:cpp/types/numeric limits/dsc minSzablon:cpp/types/numeric limits/dsc lowestSzablon:cpp/types/numeric limits/dsc maxSzablon:cpp/types/numeric limits/dsc round errorSzablon:cpp/types/numeric limits/dsc infinitySzablon:cpp/types/numeric limits/dsc quiet NaNSzablon:cpp/types/numeric limits/dsc signaling NaN[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) |
Klasy pomocnicze
Szablon:cpp/types/numeric limits/dsc float round styleSzablon:cpp/types/numeric limits/dsc float denorm styleZwią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< 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 |
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