Как сохранить наибольшее возможное двойное значение (1,8e + 308) в переменной в двоичной форме? - PullRequest
0 голосов
/ 11 июня 2019

В Java, поскольку double имеет ширину 64 бита, я попытался сохранить наибольшее возможное значение double в переменной с именем "a" в двоичной форме, как показано ниже:

double a = 0B111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111;

Почему это так?выдает ошибку времени компиляции, поскольку я использовал только 63 бита (что в допустимом диапазоне)?

Ответы [ 2 ]

2 голосов
/ 11 июня 2019

0B111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111 является целым, а не двойным.Поскольку он больше Integer.MAX_VALUE, он не компилируется.

Если вы хотите получить двойное значение из его двоичного представления, вам следует использовать Double.longBitsToDouble (и использовать длинный литерал вместо int):

double a = Double.longBitsToDouble(0B111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111L);
1 голос
/ 11 июня 2019

Самый большой дубль - это не все биты «1», формат IEEE754.Вы можете поиграться с конвертером, чтобы увидеть эффект отдельных битов: http://www.binaryconvert.com/convert_double.html

Максимальное число, которое вы можете представить с помощью чисел с плавающей запятой или двойных, бесконечно.Вы можете попробовать это:

double my_max_double = Double.POSITIVE_INFINITY;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...