alterna ai
ALTERNA AI / ГЛАВА 10 · 01

10.1 Как записать число конечным числом битов

Сеть состоит из массивов чисел и сумм произведений.

У компьютера нет бесконечного количества цифр. Число записывается знаком, масштабом и значащими разрядами; некоторые значения придётся округлить.

Числа имеют конечную точность; их нужно хранить и переносить. Матричные блоки дают много независимой работы, но память и организация групп также влияют на результат.

Конечные биты вместо произвольной точности

Вещественное число из формулы и его машинное представление — разные объекты. В двоичном floating point хранятся sign s, поле exponent E и целая fraction F. Для нормального числа с f дробными битами и смещением bias:

x=(−1)s(1+F2f)2E−bias.x=(-1)^s\left(1+\frac{F}{2^f}\right)2^{E-\mathrm{bias}}.

У FP32 поля имеют размеры1/8/23, bias127. В −192=−1.5×2⁷ получаем s=1,E=134,F=2²². Начальная единица нормальной significand не хранится отдельно. Источник H01 описывает поля и правила округления.

При E=0 правила другие: subnormal равен (−1)^s(F/2^f)2^(1−bias), без скрытой единицы. При F=0 это signed zero. Максимальное E зарезервировано для infinity и NaN: у infinity fraction0, у NaN она ненулевая. Поэтому «все битовые строки — обычные числа» неверно.

Эксперимент. Введите−192, затем−0, затем переключите формат. Отдельный редактор битов позволяет изменить sign/exponent/fraction и увидеть декодирование. Special values отображаются с объяснением; NaN не выдаётся за корректный результат последующего вычисления.

Граница. Вход сначала становится JavaScript Number (binary64). Codec округляет именно это значение в выбранный формат, а не точное произвольное десятичное рациональное число. Например,.1 уже не точно представимо вbinary64. Подпись формата не превращает все вычисления страницы вFP16.

import struct
bits=struct.unpack('>I',struct.pack('>f',-192.0))[0]
assert bits>>31==1
assert (bits>>23)&255==134
assert bits&((1<<23)-1)==1<<22

Код повторяет только что разобранные операции. Полный проверяемыйPython-пример главы доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.

При encoded exponent0 используется другое правило без скрытой1.

Размер записи и точность. Как этот вопрос продолжает полученный результат?

Python-примеры главы 10 Академическая база →