Q: Is DBL_MIN the smallest positive double?
The code below seems to anwser this question with no. But if this is true, how is DBL_MIN the defined and what is its use or purpose.
Platform: Windows7 & Visual Studio 2013
double next_to_zero = std::nextafter(0.0,DBL_MIN);
bool b = DBL_MIN <= next_to_zero;
std::cout << std::boolalpha
<< "is dbl_min the smallest representable double? "
<< b << '\n';
std::cout << std::setprecision(56)
<< "dbl_min = " << DBL_MIN << '\n'
<< "next to zero = " << next_to_zero;
outputs:
is dbl_min the smallest representable double? false
dbl_min = 2.2250738585072013830902327173324040642192159804623318306e-308
next to zero = 4.9406564584124654417656879286822137236505980261432476443e-324
DBL_MIN is the smallest positive normal double . DBL_TRUE_MIN is the smallest positive double (since C++17). It will be smaller than DBL_MIN when double supports subnormals.
Limitations. DOUBLE value ranges: Smallest DOUBLE value: -1.79769E+308.
I'm restricting this answer, perhaps unnecessarily, to IEEE754 floating point.
DBL_MIN
is not allowed to be a subnormal number.
But std::nextafter
is allowed to return a subnormal number.
Hence the return value of the latter could be less than DBL_MIN
.
For more details see https://en.wikipedia.org/wiki/Denormal_number
Is
DBL_MIN
the smallest positive double?
Not certainly.DBL_MIN
is the smallest positive normal double
.
DBL_TRUE_MIN
is the smallest positive double
(since C++17). It will be smaller than DBL_MIN
when double
supports subnormals.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With