From cppreference.com
template<classT>classnumeric_limits;The std::numeric_limits class template provides a standardized way to query various properties of arithmetic types (e.g. the largest possible value for type int is std::numeric_limits<int>::max()).
This information is provided via specializations of the std::numeric_limits template. The
makes available specializations for all arithmetic types (only lists the specializations for cv-unqualified arithmetic types):
Defined in header
template<>classnumeric_limits<bool>;template<>classnumeric_limits<char>;template<>classnumeric_limits<signedchar>;template<>classnumeric_limits<unsignedchar>;template<>classnumeric_limits<wchar_t>;template<>classnumeric_limits<char8_t>;(since C++20)template<>classnumeric_limits<char16_t>;(since C++11)template<>classnumeric_limits<char32_t>;(since C++11)template<>classnumeric_limits<short>;template<>classnumeric_limits<unsignedshort>;template<>classnumeric_limits<int>;template<>classnumeric_limits<unsignedint>;template<>classnumeric_limits<long>;template<>classnumeric_limits<unsignedlong>;template<>classnumeric_limits<longlong>;(since C++11)template<>classnumeric_limits<unsignedlonglong>;(since C++11)template<>classnumeric_limits<float>;template<>classnumeric_limits<double>;template<>classnumeric_limits<longdouble>;The value of each member of a specialization of std::numeric_limits on a cv-qualified type cvT is equal to the value of the corresponding member of the specialization on the unqualified type T. For example, std::numeric_limits<int>::digits is equal to std::numeric_limits<constint>::digits.
Aliases of arithmetic types (such as
or
) may also be examined with the std::numeric_limits type traits.
Non-arithmetic standard types, such as std::complex<T> or
, do not have specializations.
If the implementation defines any
, specializations of std::numeric_limits must also be provided for them.
(since C++20)Implementations may provide specializations of std::numeric_limits for implementation-specific types: e.g. GCC provides std::numeric_limits<__int128>. Non-standard libraries may
for library-provided types, e.g.
provides std::numeric_limits<half> for a 16-bit floating-point type.
Template parameters
T - a type to retrieve numeric properties for Member constants
[static]
identifies types for which
is specialized
(public static member constant)
[static]
identifies signed types
(public static member constant)
[static]
identifies integer types
(public static member constant)
[static]
identifies exact types
(public static member constant)
[static]
identifies floating-point types that can represent the special value “positive infinity”
(public static member constant)
[static]
identifies floating-point types that can represent the special value “quiet not-a-number” (NaN)
(public static member constant)
[static]
identifies floating-point types that can represent the special value “signaling not-a-number” (NaN)
(public static member constant)
[static]
identifies the denormalization style used by the floating-point type
(public static member constant)
[static]
identifies the floating-point types that detect loss of precision as denormalization loss rather than inexact result
(public static member constant)
[static]
identifies the rounding style used by the type
(public static member constant)
[static]
identifies the IEC 559/IEEE 754 floating-point types
(public static member constant)
[static]
identifies types that represent a finite set of values
(public static member constant)
[static]
identifies types that handle overflows with modulo arithmetic
(public static member constant)
[static]
number of radix digits that can be represented without change
(public static member constant)
[static]
number of decimal digits that can be represented without change
(public static member constant)
[static](C++11)
number of decimal digits necessary to differentiate all values of this type
(public static member constant)
[static]
the radix or integer base used by the representation of the given type
(public static member constant)
[static]
one more than the smallest negative power of the radix that is a valid normalized floating-point value
(public static member constant)
[static]
the smallest negative power of ten that is a valid normalized floating-point value
(public static member constant)
[static]
one more than the largest integer power of the radix that is a valid finite floating-point value
(public static member constant)
[static]
the largest integer power of 10 that is a valid finite floating-point value
(public static member constant)
[static]
identifies types which can cause arithmetic operations to trap
(public static member constant)
[static]
identifies floating-point types that detect tinyness before rounding
(public static member constant)
Member functions
[static]
returns the smallest finite value of the given non-floating-point type, or the smallest positive normal value of the given floating-point type
(public static member function)
[static](C++11)
returns the lowest finite value of the given type, i.e. the most negative value for signed types, 0 for unsigned types
(public static member function)
[static]
returns the largest finite value of the given type
(public static member function)
[static]
returns the difference between 1.0 and the next representable value of the given floating-point type
(public static member function)
[static]
returns the maximum rounding error of the given floating-point type
(public static member function)
[static]
returns the positive infinity value of the given floating-point type
(public static member function)
[static]
returns a quiet NaN value of the given floating-point type
(public static member function)
[static]
returns a signaling NaN value of the given floating-point type
(public static member function)
[static]
returns the smallest positive subnormal value of the given floating-point type
(public static member function)
Helper classes
Relationship with C library macro constants
Specialization
std::numeric_limits<T>
where T is Members min()lowest()
(C++11)max()radixboolfalsefalsetrue2char
2signedchar
2unsignedchar00
2wchar_t
2char8_t00
2char16_t00
2char32_t00
2short
2signedshortunsignedshort00
2int
2signedintunsignedint00
2long
2signedlongunsignedlong00
2longlong
2signedlonglongunsignedlonglong00
2Specialization
std::numeric_limits<T>
where T is Members denorm_min()min()lowest()
(C++11)max()epsilon()digitsdigits10float
-FLT_MAX
double
-DBL_MAX
longdouble
-LDBL_MAX
Specialization
std::numeric_limits<T>
where T is Members (continue) min_exponentmin_exponent10max_exponentmax_exponent10radixfloat
double
longdouble
Example
Run this code
#include<iostream>#include<limits>intmain(){std::cout<<"type\t│ lowest()\t│ min()\t\t│ max()\n"<<"bool\t│ "<<std::numeric_limits<bool>::lowest()<<"\t\t│ "<<std::numeric_limits<bool>::min()<<"\t\t│ "<<std::numeric_limits<bool>::max()<<'\n'<<"uchar\t│ "<<+std::numeric_limits<unsignedchar>::lowest()<<"\t\t│ "<<+std::numeric_limits<unsignedchar>::min()<<"\t\t│ "<<+std::numeric_limits<unsignedchar>::max()<<'\n'<<"int\t│ "<<std::numeric_limits<int>::lowest()<<"\t│ "<<std::numeric_limits<int>::min()<<"\t│ "<<std::numeric_limits<int>::max()<<'\n'<<"float\t│ "<<std::numeric_limits<float>::lowest()<<"\t│ "<<std::numeric_limits<float>::min()<<"\t│ "<<std::numeric_limits<float>::max()<<'\n'<<"double\t│ "<<std::numeric_limits<double>::lowest()<<"\t│ "<<std::numeric_limits<double>::min()<<"\t│ "<<std::numeric_limits<double>::max()<<'\n';}Possible output:
type │ lowest() │ min() │ max() bool │ 0 │ 0 │ 1 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 Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR Applied to Behavior as published Correct behavior
C++98 specializations for all fundamental types need to be provided excluded non-arithmetic types
C++98 it was unclear whether the std::numeric_limits
specialization for a cv-qualified type behaves as the same as
the corresponding specialization for the cv-unqualified type they have the
same behavior See also