\(\newcommand{\W}[1]{ \; #1 \; }\) \(\newcommand{\R}[1]{ {\rm #1} }\) \(\newcommand{\B}[1]{ {\bf #1} }\) \(\newcommand{\D}[2]{ \frac{\partial #1}{\partial #2} }\) \(\newcommand{\DD}[3]{ \frac{\partial^2 #1}{\partial #2 \partial #3} }\) \(\newcommand{\Dpow}[2]{ \frac{\partial^{#1}}{\partial {#2}^{#1}} }\) \(\newcommand{\dpow}[2]{ \frac{ {\rm d}^{#1}}{{\rm d}\, {#2}^{#1}} }\)
numeric_limits¶
View page sourceNumeric Limits For an AD and Base Types¶
Syntax¶
numeric_limits
< Float >:: epsilon
()numeric_limits
< Float >:: min
()numeric_limits
< Float >:: max
()numeric_limits
< Float >:: quiet_NaN
()numeric_limits
< Float >:: infinity
()numeric_limits
< Float >:: digits10
numeric_limits
< Float >:: max_digits10
CppAD::numeric_limits¶
The functions above and have the prototype
static
FloatCppAD::numeric_limits<
Float >:: fun ( void )
where fun is
epsilon
, min
, max
, quiet_NaN
, and infinity
.
The values digits10
and max_digits10
are
member variable and not a functions.
std::numeric_limits¶
CppAD does not use a specialization of std::numeric_limits
because this would be to restrictive.
The C++ standard specifies that Non-fundamental standard
types, such as
std::complex<double>
shall not have specializations
of std::numeric_limits
; see Section 18.2 of
ISO/IEC 14882:1998(E).
In addition, since C++11, a only literal types can have a specialization
of std::numeric_limits
.
Float¶
These functions are defined for all AD
< Base > ,
and for all corresponding Base types;
see Base type base_limits .
epsilon¶
The result eps is equal to machine epsilon and has prototype
Float eps
The file num_limits.cpp tests the value eps by checking that the following are true
where all the values, and calculations, are done with the precision corresponding to Float .
min¶
The result min is equal to the minimum positive normalized value and has prototype
Float min
The file num_limits.cpp tests the value min by checking that the following are true
abs
( (( min / 100) * 100) / min - 1
) > 3 * epsabs
( (( min * 100) / 100) / min - 1
) < 3 * epswhere all the values, and calculations, are done with the precision corresponding to Float .
max¶
The result max is equal to the maximum finite value and has prototype
Float max
The file num_limits.cpp tests the value max by checking that the following are true
abs
( (( max * 100) / 100) / max - 1
) > 3 * epsabs
( (( max / 100) * 100) / max - 1
) < 3 * epswhere all the values, and calculations, are done with the precision corresponding to Float .
quiet_NaN¶
The result nan is not a number and has prototype
Float nan
The file num_limits.cpp tests the value nan by checking that the following is true
nan != nan
infinity¶
The result inf is equal to the positive infinite value and has prototype
Float inf
The file num_limits.cpp tests the value inf by checking that the following are true
isnan
( inf -
inf )digits10¶
The member variable digits10
has prototype
static const int numeric_limits
< Float >::digits10
It is the number of decimal digits that can be represented by a Float value. A number with this many decimal digits can be converted to Float and back to a string, without change due to rounding or overflow.
max_digits10¶
The member variable max_digits10
has prototype
static const int numeric_limits
< Float >::max_digits10
is the number of decimal digits that are necessary to uniquely represent all distinct values of the type Float . For example, the number of digits necessary to convert to text and back and get the exact same result.
Example¶
The file num_limits.cpp contains an example and test of these functions.