numeric_limits<T>::min();
numeric_limits<T>::lowest();
What is the different between the value returned by both functions?
Paragraph 18.3.2.4 of the C++11 Standard specifies:
static constexpr T min() noexcept
;1 Minimum finite value.
2 For floating types with denormalization, returns the minimum positive normalized value.
3 Meaningful for all specializations
[...]
static constexpr T lowest() noexcept
;6 A finite value x such that there is no other finite value y where y < x.
7 Meaningful for all specializations in which is_bounded != false.
Footnote 197 then adds the relevant remark:
lowest()
is necessary because not all floating-point representations have a smallest (most negative) value that is the negative of the largest (most positive) finite value.
For floating point types min
returns the smallest finite number that is > 0
representable in the type (i.e. the number having the lowest absolute value != 0
) while lowest
returns the smallest finite number that is representable (i.e. the negative number of maximal absolute value that is less than -infinity
).
If you check a reference of these functions, e.g. this one for min
and this one for lowest
you can see that there are some values that differ.
来源:https://stackoverflow.com/questions/15783525/numeric-limits-lowest-and-min-member-functions