T27.AI

Блог

Золотое сечение в этом формате — масштаб, а не информация

2026-08-18 · 8 мин чтения

Формат, у которого φ в названии. Измерено: в двухбитном алфавите цифр φ вообще не наблюдаем, а скалярное произведение векторов GFTernary точно равно φ² на те же коды, прочитанные как сбалансированная троичная. Предшествующая работа поставила φ туда, где он несёт информацию, ещё в 2002-м.

Number formatsMeasurementSelf-critiqueFPGA

У формата под названием GoldenFloat золотое сечение стоит в имени. Спрашивать стоит не о том, близко ли 1.618 к φ, а о том, выполняется ли определяющее свойство φ в той арифметике, которой формат реально считает.

Здесь φ живёт в трёх арифметиках, и они не согласны между собой.

гдеφ² = φ + 1 ?примечание
оракул, точное кольцо ℤ[φ]да, символьно14641/14641 решений о знаке сходятся с 60-значной арифметикой, ни разу не касаясь float
замкнутый 2-битный форматне измеримосм. ниже
RTL, fp32нет, расхождение 1 ulp0x40278DDF против 0x40278DDE

В замкнутом формате φ не наблюдаем

Декодировать два кода, выполнить операцию, квантовать обратно по знаку. Подстановка 1, 2, π, 0.001 или 10¹² вместо φ даёт идентичные 16 таблиц сложения и 16 умножения. На двух битах формат наблюдательно неотличим от сбалансированной троичной.

В скалярном произведении тот же факт принимает более резкую форму. Каждая цифра есть φ·t, где t ∈ {−1, 0, +1}, поэтому каждое слагаемое равно (φ·t)(φ·u) = φ²·t·u, и по линейности:

<x, y>  =  φ² · <x~, y~>

где x~ и y~ — те же коды, прочитанные как сбалансированная троичная. Проверено на 20000 случайных скалярных произведений как целочисленное равенство в ℤ[φ]: аккумулятор всегда равен (k, k). Первая попытка мерила это через десятичное приближение φ, дала 1e-47, и я чуть не записал результат как точный ноль. Ошибкой была линейка, а не результат.

phi in the DIGIT ALPHABETGFTernary, 2 bits-phi0+phiweight111dot product<x, y>phi factors outphi^2 x <x~, y~>a per-tensor scalephi in the POSITIONAL WEIGHTSStakhov 2002, on Bergman 1957-10+1weightphi^0phi^2phi^4dot product<x, y>(no such edge)the weights differ, so phicannot be factored outcarriesinformation
Одна и та же константа, два места, противоположный итог. Слева все цифры имеют одинаковый вес, поэтому φ выносится из суммы и оседает в per-tensor scale. Справа веса — степени φ, и вынести его нельзя: лишнее ребро слева и есть вся разница.

Во что обходится φ

φ² = 2.618034 — константа, которую любой квантованный конвейер уже несёт как per-tensor scale. Реализующая её константа fp32 `0x3FCF1BBD` — корректно округлённый φ (0.138 ulp), и она не добавляет представимости, но стоит округления: 14 ulp на скалярном произведении длины 4096, и φ² ≠ φ + 1 в железе с расхождением в 1 ulp.

Плата за это — площадь. Произведение двух 2-битных кодов вычисляется так: оба декодируются в fp32, запускается полноразмерный умножитель формы IEEE, и 32-битный результат порогами сводится обратно к двум битам.

блокячеекпроводовтриггеров
gf_mul_param, свободные 32-битные входы1654166417
точный блок, без умножителя и без φ13140
fp32-путь с 2-битными входами14632

Измерено на Yosys 0.65. Версия — часть числа: тот же скрипт на 0.33 даёт другие счётчики ячеек. Все 16 пар входов совпадают между двумя блоками, прогнанные через рукопожатие fp32-конвейера: это эквивалентность, а не просто уменьшение.

Третья строка — не проект. Это yosys приходит к тому же выводу распространением констант: когда входов всего четыре кода, умножитель сворачивается. Такое сворачивание — везение, а не архитектура. Проект по-прежнему запрашивает общий умножитель ради функции от четырёх бит, и инструмент, который не свернёт, заплатит первую строку.

Где φ всё-таки несёт информацию

Ничто из этого не говорит, что φ — плохой выбор. Оно говорит, что алфавит цифр — то самое место, где φ не может сделать никакой работы. Поставьте его в позиционные веса, и он сможет: тернарная зеркально-симметричная система Стахова использует цифры {−1, 0, +1} с весами φ^(2i), опираясь на систему Бергмана с основанием φ (1957). Там позиция цифры меняет её значение, поэтому φ не выносится.

Эта система была здесь переписана и проверена: у каждого целого от 0 до 12 есть представление, чья строка цифр не меняется при чтении задом наперёд. Именно на этом свойстве Стахов построил самопроверяющийся сумматор: сбой ломает симметрию, и код обнаруживает собственную ошибку.

Та же константа, противоположный итог. Предшествующая работа выбрала несущее место ещё в 2002-м.

Проверка, которая не может провалиться

Верификатор, стоящий за всем этим, прошёл мутационное тестирование — и пережил мутацию, которую обязан был поймать: подмена одной записи в таблице оставила все утверждения зелёными, потому что таблица стояла по обе стороны проверяемого тождества и сократилась сама с собой. Часом раньше шаг воркфлоу, написанный чтобы поймать молча игнорируемый пин тулчейна, читал 8-значную дату из строки версии, где даты нет, — охрана пропускала сравнение, и шаг рапортовал успех, ничего не сравнив.

Оба были вакуумными. Ни один не был найден чтением; оба нашлись, когда меняешь константу и замечаешь, что ничего не покраснело. Из этого выросла команда, и наведённая обратно на верификатор она нашла третью дыру: тест подстановки сравнивал таблицы квантователя только друг с другом, поэтому вырожденный квантователь сделал бы всё утверждение об инертности вакуумно истинным. Теперь таблица привязана к декодеру RTL.

Проверка, которая не может провалиться, неотличима от проверки, которая прошла.

Чего всё это не устанавливает

Ни частоты, ни платы, ни энергопотребления. Точный блок комбинационный, поэтому ноль триггеров — свойство блока, а не заявка на скорость. Ничто здесь не сверяет проект со спецификацией. И измерение, которое решает, стоит ли вообще публиковать это семейство форматов — блочная ось против MXFP4 — не сделано.

Чего это не решает

Пруфы

Каждая цифра выше измерена, и рядом с ней названы её пределы.