
Есть крайне занимательный факт. Двоичная логика, которую использует каждый современный процессор — математически не оптимальна и проигрывает тернарной по плотности представления данных. Но как так-то?
Аж в 1956 году Николай Брусенцов из Вычислительного центра МГУ взял этот факт всерьез и убедил академика Соболева дать ему лабораторию. Через три года машина работала.
Ее назвали Сетунь — по реке рядом с университетом. По итогу произвели около 50 штук (но тут, кстати, источники расходятся между цифрами 46 и 50). И к сожалению, больше ни одна серийная ЭВМ в мире на троичной логике не выходила.
Вот и разберемся — в архитектуре, цифрах и в том, куда это все делось.
Немного про необычные термины
Слово «бит» — это сокращение от binary digit, двоичная цифра. В троичной машине двоичных цифр нет, поэтому и единицы измерения другие.
Трит (ternary digit) — минимальная единица троичной информации. Принимает три значения: -1, 0 или +1. По информационной емкости 1 трит = log₂(3) ≈ 1.58 бита.
Трайт (tryte) — аналог байта. В Сетуни-70 — 6 тритов. Покрывает 729 значений против 256 у байта при схожей схемотехнике.
Симметричная троичная система (СТС) — позиционная система с основанием 3 и цифрами {-1, 0, +1}. Знак числа определяется старшим тритом автоматически. Отдельного знакового бита нет.

Оптимальное основание — это не 2
Для позиционной системы счисления с основанием r и n разрядами можно записать r^n чисел. Стоимость машины пропорциональна числу элементов — то есть r × n. Если минимизировать это произведение при фиксированном диапазоне чисел, производная обнуляется при r = e ≈ 2.718.
Двойка проигрывает. Тройка — ближайшее целое к e. С информационной точки зрения тернарная система на ~5% эффективнее двоичной по числу элементов при том же объеме данных. Не гигантский выигрыш, но при сотнях тысяч ячеек это реальная экономия железа.
Кроме того, в СТС знак числа встроен в саму арифметику. 18-тритное слово покрывает диапазон от -193 710 244 до +193 710 244 без отдельного знакового бита, без дополнительного кода, без ручных манипуляций со знаком. Просто работает.
Как реализовать трит на обычных элементах
Нормальных троичных транзисторов в 1950-е не было. Брусенцов взял за основу феррит-диодные ячейки Гутенмахера — бесконтактные магнитные усилители на ферритовом сердечнике с диодом. Никаких ламп в логической части. Только феррит и диод. Отсюда, собственно, и высокая надежность — феррит не перегорает как лампа.
Трит хранился как два двоичных разряда с запрещенной комбинацией:
-
00 → значение -1
-
01 → значение 0
-
10 → значение +1
-
11 → запрещено, не используется
Из четырех возможных состояний — три рабочих. Не настоящая троичная физика на трех уровнях напряжения, но функционально эквивалентно. И это работало.
Архитектура, которая удивляет даже сейчас
Слово — 18 тритов. Это примерно 29 двоичных бит. Инструкция делится на три части — 5 тритов на код операции, 1 трит на модификатор адреса, 12 тритов на сам адрес.
Модификатор адреса — тоже элегантная деталь. Один трит принимает три значения: -1, 0, +1. Если -1 — вычти индекс-регистр из адреса. Если 0 — без изменений. Если +1 — прибавь. Один разряд заменяет целый набор команд адресной арифметики.
Система команд — всего 24 инструкции. При теоретическом максимуме в 3^5 = 243 кода запас колоссальный. Но главное — условный переход. В двоичной машине нужно две команды: «перейти если ноль» и «перейти если не ноль». В Сетуни — одна команда с тремя исходами: меньше нуля, равно нулю, больше нуля. Сравнение возвращает не бит, а трит. И ветвление работает по нему напрямую.
Тут, кстати, и скрыто одно из реальных архитектурных преимуществ. Меньше команд на типовой управляющий код — меньше памяти, меньше декодирования, меньше ошибок.
Производительность — 4 500 операций в секунду при тактовой частоте 200 кГц. Сложение занимало 180 мкс, умножение — до 360 мкс.
|
Параметр |
Сетунь (1959) |
IBM 650 (1954) |
БЭСМ-2 (1958) |
|
Элементная база |
Феррит-диод |
Электронные лампы |
Лампы + диоды (~9000 эл.) |
|
Быстродействие |
4 500 оп/с |
~40 оп/с* |
8 000 оп/с |
|
Длина слова |
18 тритов (~29 бит) |
10 десятичных цифр |
39 бит |
|
ОЗУ |
81 слово |
60 слов (опц.) |
2 048 слов |
|
Надежность |
Высокая |
Низкая |
Низкая |
IBM 650 работала на магнитном барабане без быстрой памяти — реальная пропускная способность около 40 инструкций в секунду из-за ожидания нужной позиции барабана. Цифра в 1000 оп/с встречается в маркетинговых материалах IBM.
Это важный момент. Программисты на IBM 650 были вынуждены вручную раскладывать инструкции по позициям барабана — существовала целая техника оптимального программирования, чтобы следующая команда оказывалась под головкой чтения в нужный момент. Если не угадал — машина ждет. По сути, половина программистской работы уходила на борьбу с физикой барабана, а не на задачу.
У Сетуни этой проблемы не было — ферритовые сердечники отвечали за 180 мкс на сложение без всякого ожидания.
БЭСМ-2 быстрее — 4000 ламп и 5000 диодов давали 8000 операций в секунду. Но лампы горят. Реально горят, физически. Ламповые машины того времени требовали замены элементов каждые несколько дней, иногда чаще. При 4000 ламп в системе это постоянная работа технического персонала, запас расходников, простои. Сетунь на феррит-диодной базе работала без этого.
Память — двухуровневая. 81 слово на ферритовых сердечниках как быстрый буфер и магнитный барабан на 2 000 слов с постраничным обменом. Конкретно это давало возможность работать с данными, которые не влезают в быструю память — машина сама подкачивала нужные страницы с барабана. В 1959 году. Это прообраз кэша и виртуальной памяти, которые в учебниках датируются сильно позже.

Сетунь-70 — наша стековая машина за год до Forth
В 1970 году Брусенцов выпустил модернизацию. Архитектурно — полный разрыв с оригиналом, но, увы, ей не суждено было стать серийной и существовала она как исследовательский прототип.
Два аппаратных стека. Стек данных для вычислений и стек возвратов для подпрограмм. Никаких адресов операндов в командах. Программа — поток слогов в обратной польской записи. Это то, что сегодня называют стековой виртуальной машиной.
На ней создали ДССП — Диалоговую систему структурного программирования. Стек, словари, интерпретируемый режим, структурированные конструкции прямо в ISA. Практически то же, что Чарльз Мур сделал с языком Forth в 1968-1970 годах — только независимо и под троичную машину.
С учетом тех лет можно сказать, что это — не совпадение. Это одна и та же инженерная логика, до которой разные люди дошли примерно в одно время. В истории такое встречалось достаточно часто.
А почему производство закрыли?
Кремниевый транзистор к середине 1960-х изменил экономику вычислений. Физика транзистора заточена под два состояния — открыт или закрыт. Три уровня на кремнии требуют дополнительной схемотехники, точных порогов напряжения и дают нестабильность при температурных дрейфах. Феррит-диодная база Сетуни это обходила, но к кремниевым интегральным схемам приспособить троичную логику оказалось нетривиально.
Советская программа ЕС ЭВМ, запущенная в 1968 году, взяла курс на совместимость с IBM System/360. Двоичная архитектура, стандартизация под западные разработки. Оригинальные проекты, в том числе Сетунь, к сожалению, финансировались по остаточному принципу.
Последний экземпляр Сетуни сошел с конвейера Казанского завода математических машин в 1965 году.
Брусенцов продолжал работать до 2014 года — до последнего. Писал статьи, доказывал, что мир свернул не туда.
Возможно, был прав. В 2025-2026 году весь разговор про BitNet b1.58 от Microsoft, получается, фактически тот же вопрос — что если считать не в FP16, а в {-1, 0, +1}? Круг замкнулся, просто через 60 лет и на другом железе.
Коммерческих чипов с нативной тернарной арифметикой по-прежнему нет.
Мы разбирали это подробнее в отдельном материале — что такое однобитные и тернарные нейросети, как работает BitNet b1.58 и где это всё сейчас находится.
ссылка на оригинал статьи https://habr.com/ru/articles/1032808/