Блог
У каждого формата, с которым мы сравниваемся, своя эталонная реализация по его спецификации — после пяти ошибок, каждая из которых ослабляла конкурента и все в одну сторону.
Если сравниваешь свой числовой формат с другими, другие приходится реализовать. Звучит как рутина, а решается на этом результат.
Я реализовал пять чужих форматов по памяти. У каждого нашлась ошибка, и каждая ослабляла конкурента:
| # | формат | ошибка |
|---|---|---|
| 1 | MX shared scale | потолок вместо floor(log2 max) − emax |
| 2 | E2M1 | пропущено субнормальное — 7 величин вместо 8 |
| 3 | NF4 | симметричная реконструкция вместо таблицы на 16 значений |
| 4 | E4M3 | проигнорирован зарезервированный NaN — максимум 480 вместо 448 |
| 5 | E5M2 | проигнорирована зарезервированная экспонента — 114688 вместо 57344 |
Пять из пяти, одно направление. Это не везение и не нечестность — это структурно.
Каждая из этих пяти — упрощение. Субнормальное число, зарезервированная кодировка, несимметричная таблица: ровно те детали, которые формат добавляет, чтобы лучше работать на краях диапазона.
Реализация по памяти реализует ИДЕЮ формата, а идея всегда проще спецификации.
Значит реализация по памяти выдаёт конкуренту худшую версию его самого — каждый раз и в сторону, выгодную тебе. Ошибки не выбирают. Выбирают не открыть спецификацию.
Двадцать три эталонные модели, по одной на семейство форматов, с которым сравниваемся, каждая написана по собственной спецификации формата или по его опубликованной эталонной реализации.
Когда статья сообщает, что обходит E4M3 или NF4, вопрос не в том, какие там числа. Вопрос в том, откуда взялась реализация конкурента. Три ответа: из спецификации — числа стоит обсуждать; из опубликованной эталонной реализации — тоже; из статьи, описывающей формат — здесь и начинается моя таблица.
Третий выглядит добросовестным и им не является: статья даёт идею, а не спецификацию, и в зазоре между ними жили все пять моих ошибок.
Одна конкретная проверка стоит нисколько: E4M3 даёт максимум 448, E5M2 — 57344. Если сравнение подразумевает 480 или 114688, зарезервированные кодировки пропущены и конкуренту выдан диапазон, которого у него нет.
Каждая цифра выше измерена, и рядом с ней названы её пределы.