Наибольшее (существующее) число с половинной точностью 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

Другие вопросы по тегам