Почему экспонента для числа с плавающей запятой (32 бита) в Java равна -126, а не -128? - PullRequest
0 голосов
/ 02 ноября 2019

32-битный стандарт:

1 Бит для положительного / отрицательного значения числа. 8 бит для экспоненты и 24 бита для мантисса.

8 бит для экспоненты, что означает 1 * 2 ^ 7 + 1 * 2 ^ 6 + ... = 255 Если максимальный экспонент равен 127, томинимальный экспонент должен быть -128, так что 126 + 128 = 255.

Но почему Java говорит, что минимальный экспонент -126? 255 - (127 + 126) = 2, поэтому есть два числа, которые мы не используем.

1 Ответ

2 голосов
/ 02 ноября 2019

Это число имеет «уклон», что в этих битах? Сначала вычтите 0x7F из него, чтобы получить свою ценность. Наименьший показатель степени достигается использованием значения 0x01: 0x01 - 0x7F = 1 - 127 = -126. Наивысшее достигается со значением 0xFE: 0xFE - 0x7F = 254 - 127 = 127.

Но что случилось со значениями показателя 0x00 и 0xFF? Вот почему доступно 254, а не 256 уникальных показателя: эти два являются особой магией и обычно недоступны. Экспонент 0 используется как для кодирования 0 (если число для дроби также равно 0), так и для так называемых субнормальных чисел, которые являются числами, очень близкими к 0.

0xFF используется для специальных значений;Вот как поплавки могут хранить NaN и обе бесконечности.

...