user1235183 - 3 months ago 14

C++ Question

**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

Answer

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