Can anyone shed some light on why Double.MIN_VALUE
is not actually the minimum value that Doubles can take? It is a positive value, and a Double can of course be negative.
I understand why it's a useful number, but it seems a very unintuitive name, especially when compared to Integer.MIN_VALUE
. Calling it Double.SMALLEST_POSITIVE
or MIN_INCREMENT
or similar would have clearer semantics.
Also, what is the minimum value that Doubles can take? Is it -Double.MAX_VALUE
? The docs don't seem to say.
The IEEE 754 format has one bit reserved for the sign and the remaining bits representing the magnitude. This means that it is "symmetrical" around origo (as opposed to the Integer values, which have one more negative value). Thus the minimum value is simply the same as the maximum value, with the sign-bit changed, so yes, -Double.MAX_VALUE
is the smallest possible actual number you can represent with a double
.
I suppose the Double.MAX_VALUE
should be seen as maximum magnitude, in which case it actually makes sense to simply write -Double.MAX_VALUE
. It also explains why Double.MIN_VALUE
is the least positive value (since that represents the least possible magnitude).
But sure, I agree that the naming is a bit misleading. Being used to the meaning Integer.MIN_VALUE
, I too was a bit surprised when I read that Double.MIN_VALUE
was the smallest absolute value that could be represented. Perhaps they thought it was superfluous to have a constant representing the least possible value as it is simply a -
away from MAX_VALUE
:-)
(Note, there is also Double.NEGATIVE_INFINITY
but I'm disregarding from this, as it is to be seen as a "special case" and does not in fact represent any actual number.)
Here is a good text on the subject.