В таблице диапазонов значений переменных (Java) Double и Float соответствуют значения от 1.7e-308 до 1.7e+308 и от 3.4e-038 до 3.4e+038. При это у Integer диапазон начинается с отрицательного числа, то есть с -2.147... Хотелось бы узнать почему так, если и Double, и Float могут быть отрицательными.
Максимальное значение double задается константой:
public static final double MAX_VALUE=1.7976931348623157E308;
и как говорит документация:
A constant holding the largest positive finite value of type double
В битах это выглядит так:
Как видно знаку отведен отдельный бит. Соответственно диапазон значений будет равен от -Double.MAX_VALUE до +Double.MAX_VALUE- как нетрудно заметить из битовой маски Double - в таком формате невозможно представить точный 0, а можно только Double.MIN_VALUE=4.9E-324
В противоположность ему целые числа в Java хранятся в т.н. дополнительном коде - он же Two's Complement, грубо говоря, отрицательные числа (в целом представлении) хранятся отдельно, а не через представление положительного целого числа и отдельно знака - примерно так:
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости