Przestrzenie nazw
Warianty

std::numeric_limits

Z cppreference.com
< cpp

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) [edit]
[static]
ilość cyfr (w systemie dziesiętnym), które mogą być reprezentowane bez zmian
(statyczne stałe pole) [edit]

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) [edit]
[static]
zwraca najmniejszą dodatnią wartość podnormalną danego typu zmiennoprzecinkowego
(publiczna statyczna metoda) [edit]

Klasy pomocnicze

Szablon:cpp/types/numeric limits/dsc float round styleSzablon:cpp/types/numeric limits/dsc float denorm style

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< 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

Zobacz też