Przestrzenie nazw
Warianty
Działania

std::numeric_limits

Z cppreference.com
< cpp

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>;
template<>class numeric_limits<signedchar>;
template<>class numeric_limits<unsignedchar>;
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<unsignedshort>;
template<>class numeric_limits<int>;
template<>class numeric_limits<unsignedint>;
template<>class numeric_limits<long>;
template<>class numeric_limits<unsignedlong>;
template<>class numeric_limits<longlong>;
template<>class numeric_limits<unsignedlonglong>;
template<>class numeric_limits<float>;
template<>class numeric_limits<double>;

template<>class numeric_limits<longdouble>;

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

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]

[edytuj]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]

[edytuj]Klasy pomocnicze

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

[edytuj]Związek z makrami z biblioteki C

Specjalizacja Członkowie
min()lowest()
(C++11)
max()epsilon()digitsdigits10min_exponentmin_exponent10max_exponentmax_exponent10radix
numeric_limits< bool >2
numeric_limits< char >CHAR_MINCHAR_MINCHAR_MAX2
numeric_limits< signedchar >SCHAR_MINSCHAR_MINSCHAR_MAX2
numeric_limits< unsignedchar >00UCHAR_MAX2
numeric_limits< wchar_t >WCHAR_MINWCHAR_MINWCHAR_MAX2
numeric_limits< char16_t >00UINT_LEAST16_MAX2
numeric_limits< char32_t >00UINT_LEAST32_MAX2
numeric_limits< short >SHRT_MINSHRT_MINSHRT_MAX2
numeric_limits< signedshort >
numeric_limits< unsignedshort >00USHRT_MAX2
numeric_limits< int >INT_MININT_MININT_MAX2
numeric_limits< signedint >
numeric_limits< unsignedint >00UINT_MAX2
numeric_limits< long >LONG_MINLONG_MINLONG_MAX2
numeric_limits< signedlong >
numeric_limits< unsignedlong >00ULONG_MAX2
numeric_limits< longlong >LLONG_MINLLONG_MINLLONG_MAX2
numeric_limits< signedlonglong >
numeric_limits< unsignedlonglong >00ULLONG_MAX2
numeric_limits< float >FLT_MIN-FLT_MAXFLT_MAXFLT_EPSILONFLT_MANT_DIGFLT_DIGFLT_MIN_EXPFLT_MIN_10_EXPFLT_MAX_EXPFLT_MAX_10_EXPFLT_RADIX
numeric_limits< double >DBL_MIN-DBL_MAXDBL_MAXDBL_EPSILONDBL_MANT_DIGDBL_DIGDBL_MIN_EXPDBL_MIN_10_EXPDBL_MAX_EXPDBL_MAX_10_EXPFLT_RADIX
numeric_limits< longdouble >LDBL_MIN-LDBL_MAXLDBL_MAXLDBL_EPSILONLDBL_MANT_DIGLDBL_DIGLDBL_MIN_EXPLDBL_MIN_10_EXPLDBL_MAX_EXPLDBL_MAX_10_EXPFLT_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

[edytuj]Zobacz też

close