Наибольшее (существующее) число с половинной точностью IEEE 754
Почему 0 11110 1111111111
и не 0 11111 1111111111
наибольшее число с половиной точности?
1 ответ
Потому что поле экспоненты 111112 зарезервировано для бесконечностей и NaN. Раздел 3.4 стандарта IEEE 754-2008 гласит:
Диапазон смещенного показателя E кодирования должен включать:
- каждое целое число от 1 до 2w - 2 включительно для кодирования нормальных чисел
- зарезервированное значение 0 для кодирования ±0 и субнормальных чисел
- зарезервированное значение 2w - 1 для кодирования ±∞ и NaN.
Здесь "w" - ширина поля экспоненты. Это относится не только к формату половинной точности, но и ко всем двоичным форматам обмена IEEE 754 (включая обычные форматы одинарной и двойной точности).
В частном случае формата binary16 w равно 5, а старшие 5 битов, следующих за знаковым битом, описывают смещенную экспоненту E и могут находиться в диапазоне от 000002 до 111112. Верхнее значение в этом диапазоне, 111112, используется для бесконечностей и значений NaN, а нижнее значение 000002 используется для нулей и субнормалей. Остальные смещенные значения экспоненты используются для представления конечных нормальных чисел. Таким образом, максимальное значение показателя степени, доступное для конечного числа, равно 2w - 2 = 111102, а не 111112.
Для этого формата смещение показателя равно 15, поэтому битовая комбинация 0 11110 1111111111 дает несмещенный показатель 30 - 15 = 15 и представляет значение 1,11111111112 × 215 или 65504.
Чтобы привести другой пример, самый большой двоичный код 32 (одинарной точности) представлен битовой комбинацией
0 11111110 111111111111111111111112