# <limits>
<limits>
# ``
* * *
Include the standard header **``**
to define the template class `numeric_limits`.
Explicit specializations of this class describe many arithmetic properties
of the scalar types (other than pointers).
namespace std {
enum float_denorm_style;
enum float_round_style;
template
class numeric_limits;
} // namespace stdCopy to clipboard
## `float_denorm_style`
enum float_denorm_style {
denorm_indeterminate = -1,
denorm_absent = 0,
denorm_present = 1
};Copy to clipboard
The enumeration describes the various methods that an implementation
can choose for representing a denormalized floating-point value --
one too small to represent as a normalized value:
- **`denorm_indeterminate`**
-- presence or absence of denormalized forms cannot be determined
at translation time
- **`denorm_absent`**
-- denormalized forms are absent
- **`denorm_present`** -- denormalized forms are present
## `float_round_style`
enum float_round_style {
round_indeterminate = -1,
round_toward_zero = 0,
round_to_nearest = 1,
round_toward_infinity = 2,
round_toward_neg_infinity = 3
};Copy to clipboard
The enumeration describes the various methods that an implementation
can choose for rounding a floating-point value to an integer value:
- **`round_indeterminate`**
-- rounding method cannot be determined
- **`round_toward_zero`**
-- round toward zero
- **`round_to_nearest`** -- round to nearest integer
- **`round_toward_infinity`** -- round away from zero
- **`round_toward_neg_infinity`**
-- round to more negative integer
## `numeric_limits`
template
class numeric_limits {
public:
static const float_denorm_style has_denorm
= denorm_absent;
static const bool has_denorm_loss = false;
static const bool has_infinity = false;
static const bool has_quiet_NaN = false;
static const bool has_signaling_NaN = false;
static const bool is_bounded = false;
static const bool is_exact = false;
static const bool is_iec559 = false;
static const bool is_integer = false;
static const bool is_modulo = false;
static const bool is_signed = false;
static const bool is_specialized = false;
static const bool tinyness_before = false;
static const bool traps = false;
static const float_round_style round_style =
round_toward_zero;
static const int digits = 0;
static const int digits10 = 0;
static const int max_exponent = 0;
static const int max_exponent10 = 0;
static const int min_exponent = 0;
static const int min_exponent10 = 0;
static const int radix = 0;
static Ty denorm_min() throw();
static Ty epsilon() throw();
static Ty infinity() throw();
static Ty max() throw();
static Ty min() throw();
static Ty quiet_NaN() throw();
static Ty round_error() throw();
static Ty signaling_NaN() throw();
};Copy to clipboard
The template class describes many arithmetic properties of its
parameter type `Ty`. The header defines explicit specializations
for the types `wchar_t`, *bool, char, signed char,unsigned char, short, unsigned short, int, unsigned int, long,unsigned long, float, double,* and *long double.* For all these
explicit specializations, the member `is_specialized` is true,
and all relevant members have meaningful values.
The program can supply additional explicit specializations.
For an arbitrary specialization, *no* members have meaningful
values. A member object that does not have a meaningful value
stores zero (or false) and a member function that does not return
a meaningful value returns `Ty(0)`.
### `numeric_limits::denorm_min`
static Ty denorm_min() throw();Copy to clipboard
The function returns the minimum value for the type
(which is the same as
[`min`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#numeric_limits::min)() if
[`has_denorm`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#numeric_limits::has_denorm) is
not equal to
`denorm_present`).
### `numeric_limits::digits`
static const int digits = 0;Copy to clipboard
The member stores the number of
[`radix`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#numeric_limits::radix) digits
that the type can represent without change
(which is the number of bits other than any sign bit
for a predefined integer type, or the number of mantissa
digits for a predefined floating-point type).
### `numeric_limits::digits10`
static const int digits10 = 0;Copy to clipboard
The member stores the number of decimal digits
that the type can represent without change.
### `numeric_limits::epsilon`
static Ty epsilon() throw();Copy to clipboard
The function returns the difference between 1 and the smallest
value greater than 1 that is representable for the type
(which is the value
[`FLT_EPSILON`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_float.html#FLT_EPSILON)
for type *float*).
### `numeric_limits::has_denorm`
static const float_denorm_style has_denorm =
denorm_absent;Copy to clipboard
The member stores
`denorm_present`
for a floating-point type that has
denormalized values (effectively a variable number of exponent bits).
### `numeric_limits::has_denorm_loss`
static const bool has_denorm_loss = false;Copy to clipboard
The member stores true for a type that determines
whether a value has lost accuracy because it is delivered
as a denormalized result (too small to represent as
a normalized value) or because it is inexact (not the
same as a result not subject to limitations of exponent
range and precision), an option with
[IEC 559](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#IEC%20559) floating-point representations
that can affect some results.
### `numeric_limits::has_infinity`
static const bool has_infinity = false;Copy to clipboard
The member stores true for a type that has
a representation for positive infinity.
True if [`is_iec559`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#numeric_limits::is_iec559) is true.
### `numeric_limits::has_quiet_NaN`
static const bool has_quiet_NaN = false;Copy to clipboard
The member stores true for a type that has
a representation for a **quiet NaN**,
an encoding that is ``Not a Number'' which does not
[signal](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_signal.html#signals) its presence in an expression.
True if [`is_iec559`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#numeric_limits::is_iec559) is true.
### `numeric_limits::has_signaling_NaN`
static const bool has_signaling_NaN = false;Copy to clipboard
The member stores true for a type that has
a representation for a **signaling NaN**,
an encoding that is ``Not a Number'' which
[signals](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_signal.html#signals) its presence in an expression
by reporting an exception.
True if [`is_iec559`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#numeric_limits::is_iec559) is true.
### `numeric_limits::infinity`
static Ty infinity() throw();Copy to clipboard
The function returns the representation of positive infinity
for the type. The return value is meaningful only if
[`has_infinity`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#numeric_limits::has_infinity) is true.
### `numeric_limits::is_bounded`
static const bool is_bounded = false;Copy to clipboard
The member stores true for a type that has
a bounded set of representable values (which is the case
for all predefined types).
### `numeric_limits::is_exact`
static const bool is_exact = false;Copy to clipboard
The member stores true for a type that has
exact representations for all its values (which is the case
for all predefined integer types). A fixed-point or rational
representation is also considered exact, but not a floating-point
representation.
### `numeric_limits::is_iec559`
static const bool is_iec559 = false;Copy to clipboard
The member stores true for a type that has
a representation conforming to
**IEC 559**, an international
standard for representing floating-point values (also known as
**IEEE 754** in the USA).
### `numeric_limits::is_integer`
static const bool is_integer = false;Copy to clipboard
The member stores true for a type that has
an integer representation (which is the case for all
predefined integer types).
### `numeric_limits::is_modulo`
static const bool is_modulo = false;Copy to clipboard
The member stores true for a type that has a
**modulo representation**,
where all results are reduced modulo some value (which is the
case for all predefined unsigned integer types).
### `numeric_limits::is_signed`
static const bool is_signed = false;Copy to clipboard
The member stores true for a type that has
a signed representation (which is the case for all predefined
floating-point and signed integer types).
### `numeric_limits::is_specialized`
static const bool is_specialized = false;Copy to clipboard
The member stores true for a type that has
an explicit specialization defined for template class
[`numeric_limits`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#numeric_limits)
(which is the case for all scalar types other than pointers).
### `numeric_limits::max`
static Ty max() throw();Copy to clipboard
The function returns the maximum finite value for the type
(which is
[`INT_MAX`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits.html#INT_MAX)
for type *int* and
[`FLT_MAX`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_float.html#FLT_MAX)
for type *float*). The return value is meaningful if
[`is_bounded`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#numeric_limits::is_bounded) is true.
### `numeric_limits::max_exponent`
static const int max_exponent = 0;Copy to clipboard
The member stores the maximum positive integer such that
the type can represent as a finite value
[`radix`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#numeric_limits::radix) raised to that power
minus one (which is the value
[`FLT_MAX_EXP`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_float.html#FLT_MAX_EXP)
for type *float*).
Meaningful only for floating-point types.
### `numeric_limits::max_exponent10`
static const int max_exponent10 = 0;Copy to clipboard
The member stores the maximum positive integer such that
the type can represent as a finite value
10 raised to that power (which is the value
[`FLT_MAX_10_EXP`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_float.html#FLT_MAX_10_EXP)
for type *float*).
Meaningful only for floating-point types.
### `numeric_limits::min`
static Ty min() throw();Copy to clipboard
The function returns the minimum normalized value for the type
(which is
[`INT_MIN`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits.html#INT_MIN)
for type *int* and
[`FLT_MIN`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_float.html#FLT_MIN)
for type *float*). The return value is meaningful if
[`is_bounded`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#numeric_limits::is_bounded) is true or
`is_bounded` is false and
[`is_signed`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#numeric_limits::is_signed) is false.
### `numeric_limits::min_exponent`
static const int min_exponent = 0;Copy to clipboard
The member stores the minimum negative integer such that
the type can represent as a normalized value
[`radix`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#numeric_limits::radix) raised to that power
minus one (which is the value
[`FLT_MIN_EXP`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_float.html#FLT_MIN_EXP)
for type *float*).
Meaningful only for floating-point types.
### `numeric_limits::min_exponent10`
static const int min_exponent10 = 0;Copy to clipboard
The member stores the minimum negative integer such that
the type can represent as a normalized value
10 raised to that power
(which is the value
[`FLT_MIN_10_EXP`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_float.html#FLT_MIN_10_EXP)
for type *float*).
Meaningful only for floating-point types.
### `numeric_limits::quiet_NaN`
static Ty quiet_NaN() throw();Copy to clipboard
The function returns a representation of a
[quiet NaN](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#quiet%20NaN)
for the type. The return value is meaningful only if
[`has_quiet_NaN`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#numeric_limits::has_quiet_NaN) is true.
### `numeric_limits::radix`
static const int radix = 0;Copy to clipboard
The member stores the base of the representation
for the type (which is 2 for the predefined integer types,
and the base to which the exponent is raised, or
[`FLT_RADIX`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_float.html#FLT_RADIX),
for the predefined floating-point types).
### `numeric_limits::round_error`
static Ty round_error() throw();Copy to clipboard
The function returns the maximum rounding error for the type.
### `numeric_limits::round_style`
static const float_round_style round_style =
round_toward_zero;Copy to clipboard
The member stores a value that
describes the vaious methods that an implementation
can choose for rounding a floating-point value to an integer value.
### `numeric_limits::signaling_NaN`
static Ty signaling_NaN() throw();Copy to clipboard
The function returns a representation of a
[signaling NaN](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#signaling%20NaN)
for the type. The return value is meaningful only if
[`has_signaling_NaN`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#numeric_limits::has_signaling_NaN) is true.
### `numeric_limits::tinyness_before`
static const bool tinyness_before = false;Copy to clipboard
The member stores true for a type that determines
whether a value is ``tiny'' (too small to represent as
a normalized value) before rounding, an option with
[IEC 559](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_limits2.html#IEC%20559) floating-point representations
that can affect some results.
### `numeric_limits::traps`
static const bool traps = false;Copy to clipboard
The member stores true for a type that generates some kind of
[signal](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_signal.html#signals) to report certain
arithmetic exceptions.
* * *
See also the
**[Table of Contents](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_index.html#Table%20of%20Contents)** and the
**[Index](https://docs.qualcomm.com/doc/80-N3040-23/topic/_cpp_index.html)**.
*[Copyright](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_crit_pjp.html) © 1992-2006by P.J. Plauger. All rights reserved.*
Last Published: Oct 06, 2026
Previous Topic
Next Topic