
Есть крайне занимательный факт. Двоичная логика, которую использует каждый современный процессор - математически не оптимальна и проигрывает тернарной по плотности представления данных. Но как так-то?
Аж в 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 и где это всё сейчас находится.