Which is the minimum of the two:
That depends on how you define minimum. If you want the smallest magnitude, it’s B. B is so close to 0 it might as well be 0 for most practical uses (0.000000000000000000000000000000000000011754944). But A is smaller if you think ‘minimum’ means ‘leftmost on the number line’. A is so far to the left of B there aren’t enough pixels on all the monitors in the world to draw that number line.
In C++ the result of std::numeric_limits<float>::min() is B: the smallest value a ‘float’ can store is B.
But the most-negative number a float can store is A. And A is –std::numeric_limits<float>::max().
So, if you are trying to limit the results of a function to the range of values that a float can hold, and you do this:
double result = doSomething(); double t = max(std::numeric_limits::min(), result); t = min(std::numeric_limits::max(), t); return (float)t;
You’re going to very surprised when you discover that you never see a value smaller than 1.1754944e-038. You’ll never even get 0.
What you really needed to write is this:
double result = doSomething(); double t = max(-std::numeric_limits::max(), result); t = min(std::numeric_limits::max(), t); return (float)t;
But, that trickery only applies to floating point types. The smallest magnitude you can store in an int is 0. But std::numeric_limits<int>::min() is -2147483648. That’s the most-negative value, not the value with least magnitude.
And now you know.