Все мы знаем, что живем в цифровой эре. Ее основа — двоичная логика. Такая логика построена на простой идее: ноль или единица, нет или да, ложь или истина. Всего два состояния. Поверх этого отстроены различные аппаратные реализации, системы кодирования и прочие атрибуты нашей дискретно‑цифровой жизни. И этот подход кажется нам логичным.
Но так было не всегда. Существовала небольшая вероятность, что мы пошли бы по пути троичной логики. А к «да» или «нет» добавилось бы «может быть».
Зачем? И какой смысл в троичной логике? Давайте разбираться!

Почему три, а не два?
Чтобы понять истоки идеи, нам придется нырнуть в глубину веков, задолго до появления первых ламповых монстров. Еще в 1203 году Леонардо Пизанский, известный нам как Фибоначчи, решал так называемую «задачу о гирях». Суть ее проста: какое минимальное количество гирь нужно иметь, чтобы взвесить любой груз от 1 до 40 фунтов?
Фибоначчи доказал интересную вещь. Если класть гири только на одну чашу весов (где лежит груз), оптимальной оказывается двоичная система: гири 1, 2, 4, 8, 16 и 32 фунта. Но если разрешить класть гири на обе чаши — как на груз, так и на свободную чашу для противовеса — то наиболее экономичным решением становятся гири весом 1, 3, 9 и 27 фунтов. Этим набором из четырех гирь можно измерить любую нагрузку от 1 до 40. Гиря, положенная на ту же чашу, что и груз, как бы имеет знак «минус», а на противоположную — «плюс». Так в мир математики вошла уравновешенная (симметричная) троичная система счисления с цифрами (-1, 0, 1).
В этой системе отпадает необходимость в «знаковом бите». Старший разряд числа сам говорит о его знаке. Чтобы сменить знак числа, достаточно проинвертировать все его разряды (поменять +1 на -1 и наоборот). Округление числа до ближайшего целого превращается в простейшую операцию отбрасывания младших разрядов, без дополнительных флагов и проверок.
Но главный математический выигрыш даже не в этом, а в плотности записи информации. В середине XX века профессор МГУ С.В. Фомин строго показал, что самой экономичной системой счисления является та, основание которой максимально близко к числу Эйлера e (≈ 2,718). Логарифмическая производная плотности упаковки информации достигает максимума именно в этой точке. Целое число 3 — ближайшее к этому идеалу. Троичная система позволяет записать больше чисел с тем же бюджетом.
Так. Бюджет? При чем тут бюджет?

Фокус Фомина
Если вы не слишком хотите разбираться в математических формулах, то можете пропустить эту часть статьи и взять на веру — троичная система действительно эффективнее двоичной в теоретических расчетах.
Но если ваш пытливый ум требует ответа и не понимает логики — велкам.
Представьте, что мы с вами — архитекторы идеального компьютера. У нас нет ограничений в материалах, нет транзисторов и ферритов. У нас есть только одно правило: каждое устойчивое состояние элемента памяти стоит одинаково. То есть если ячейка может хранить 2 состояния (0 и 1), ее цена — 2 условные единицы. Если 3 состояния — цена 3 единицы. Если 10 — цена 10 единиц.
Честно? Как будто да.
Сработает на практике? Тут вопросы, но этот момент мы разберем позже.
Так как мы что‑то строим, у нас есть бюджет. Скажем, С = 100 рублей. Мы хотим потратить эти деньги так, чтобы наш компьютер мог представить максимально возможное количество разных чисел. Ведь чем больше чисел, тем мощнее машина.
Вопрос: Сколько состояний n должна иметь одна ячейка, чтобы мы получили максимум комбинаций? Давайте рассуждать.
Возьмем наш бюджет С = 100 рублей.
Двоичный вариант (n=2): Ячейка стоит 2 рубля. Покупаем 50 ячеек. Они дают 2⁵⁰ комбинаций. Это примерно 1,13 × 10¹⁵ чисел.
Троичный вариант (n=3): Ячейка стоит 3 рубля. Покупаем 33 ячейки (33 × 3 = 99 рублей, рубль еще остался на мороженое). 33 ячейки дают 3³³ комбинаций. Считаем: 3³³ ≈ 5,5 × 10¹⁵ чисел.
Итог: на те же деньги троичная система дает в 5 раз больше состояний записи, чем двоичная!
Стойте! Так может с ростом основания системы счисления и бюджет становится все оптимальнее? Неа.
Десятичная (n=10) при цене ячейки 10 рублей даст всего 10¹⁰ = 10 миллиардов чисел — это в сотни тысяч раз меньше, чем двоичная.
Понимаете теперь, почему Фомин смотрел на тройку с такой надеждой? Он нашел математический «грааль»: тройка позволяет при тех же затратах получить в разы больше состояний. Оставалось только убедить инженеров сделать надежную трехуровневую ячейку. Этого чуть было не добились.
Скрытый текст
Справедливости ради надо сказать, что расчеты Фомина очень теоретизированы. Он решал задачу через максимум функции и таким образом и доказал, что наибольшая экономия достигается на числе Эйлера.
Но если положить логику Фомина не в формулы, а в деньги, то он отталкивается от того, что троичный триггер стоит в полтора раза дороже триггера двоичного. А это совсем не факт.
Одно дело двоичная история - сигнал либо есть, либо нет. Перепутать тут трудно. И другое - троичные решения. Мы еще поговорим про физическую реализацию, но держите в голове, что теоретическая математика и промышленная экономика далеко не всегда сходятся.
«Сетунь»: Рождение легенды в СССР
В середине 1950-х годов в Московском государственном университете сложилась уникальная ситуация. Академик Сергей Львович Соболев, заведующий кафедрой вычислительной математики, хотел получить для университета одну из первых советских ЭВМ — М-2, созданную в лаборатории Исаака Брука. Но по стечению обстоятельств (в том числе и из‑за научной конкуренции) машина в МГУ не попала. Тогда Соболев принял волевое решение: строить свою собственную малую ЭВМ силами университета. Руководителем группы был назначен молодой, но талантливый инженер, выпускник МЭИ — Николай Петрович Брусенцов.

Задача была амбициозной: создать максимально простую, дешевую и надежную машину для учебных заведений и конструкторских бюро. В качестве элементной базы выбрали не капризные и нестабильные тогда транзисторы, и уж тем более не прожорливые лампы. Выбрали магнитные элементы на ферритовых сердечниках и полупроводниковых диодах — феррит‑диодные ячейки.
Брусенцова отправили на стажировку в закрытую лабораторию Л.И. Гутенмахера, где уже была построена двоичная машина ЛЭМ-1 на феррит‑диодных элементах. Увидев ее, он, по воспоминаниям, ужаснулся: громоздкая, ненадежная, потребляющая массу энергии. И тут его осенило. Изучив схему, он понял, что эти магнитные элементы можно использовать совсем иначе.
В чем же была проблема машин Гутенмахера?
ЛЭМ-1 строилась на так называемых «триадах» — элементах, где для хранения и продвижения одного бита использовались три пары ферритовых сердечников и три диода. Информация продвигалась по регистру за три такта. Главная головная боль инженеров тех лет — помехи, возникавшие из‑за неидеальности ферритов. У реальных сердечников петля гистерезиса не идеально прямоугольная, поэтому при перемагничивании возникали паразитные сигналы, которые могли накапливаться и превращать «ноль» в «единицу». Для борьбы с этим в схему вводили компенсационные сердечники — дополнительные ферриты, чья обмотка включалась встречно, чтобы гасить помехи. По сути, в машинах Гутенмахера эти компенсационные элементы выполняли чисто вспомогательную функцию, будучи «балластом», который боролся с недостатками схемы, но не участвовал в логике.
Фокус Брусенцова заключался в том, что он переосмыслил роль этих элементов. Он взял уже известные феррит‑диодные ячейки и переработал схемотехнику так, чтобы они стали удобной основой не для двоичной, а для троичной логики. На практике одно состояние хранилось в двух сердечниках, а устойчивость достигалась за счет оригинального включения.
Брусенцов заставил работать на логику тот самый компенсационный сердечник, который в двоичных машинах Гутенмахера был пассивным балластом. Изменив режимы тактирования и обвязку, он превратил пару «основной + компенсационный» в ячейку, способную надежно представлять три устойчивых состояния. Это позволило использовать те же два сердечника для хранения трех значений, а не двух, и резко упростить схему в целом.
Так, благодаря гениальной догадке и поддержке Соболева, на свет появилась архитектура «Сетуни». Это была не просто троичная машина, а очень изящная и необычайно цельная инженерная конструкция.
Элементная база. Около 3500 феррит‑диодных элементов (трансфлюксоров) и всего лишь около 330 обычных транзисторов на всю машину. Были там и лампы с реле, но основа логики все же феррит‑диоды.
Арифметика. Симметричный троичный код. Разряд назывался трит (ternary digit), а его упаковка из 6 тритов — трайт. Диапазон чисел в трайте был от -364 до +364.
Система команд. Всего 24 команды! Это было настолько компактно и минималистично, что сегодня может напомнить некоторые RISC‑идеи. Программирование в машинных кодах было простым и наглядным из‑за отсутствия дополнительных кодов и знаковых разрядов. Настолько, что для «Сетунь» часто этими кодами и программировали (без ассемблера). Например, чтобы сменить знак числа, не нужно было выполнять сложную последовательность действий — достаточно было выполнить одну операцию поразрядной инверсии.
Производительность и надежность. При тактовой частоте 200 кГц машина выдавала 2000–4500 операций в секунду. Но главным чудом была надежность — 95–98% полезного машинного времени. Первый опытный образец, собранный вручную группой энтузиастов, проработал 15 лет! За все время случилось всего три отказа элементов.
В 1959 году опытный образец был готов, а в 1961 году Казанский завод математических машин начал серийный выпуск «Сетуни». Было выпущено 46 или 50 машин (данные разнятся), которые работали по всему СССР — от Калининграда до Якутска и Магадана, причем без всякого ЗИПа и без штата обслуживающего персонала, что по тем временам было неслыханно.

Что пошло не так?
Казалось бы, вот он — триумф троичного подхода. Но в 1965 году производство «Сетуни» было остановлено. Почему? Ответ на этот вопрос сложнее, чем кажется, и коренится не в технике, а в человеческой психологии и советской экономике.
Версий несколько.
Слишком дешево. Это, пожалуй, самая печальная причина. Себестоимость «Сетуни» составляла около 27 500 рублей. Для сравнения, аналогичные по возможностям двоичные машины стоили заметно дороже. Заводу было невыгодно выпускать дешевый продукт — план по валу в денежном выражении выполнять было сложнее. Проще и привычнее было штамповать то, что дороже, пусть и менее надежное.
Косность мышления. Мир уже встал на рельсы двоичной логики. Полупроводниковая индустрия развивалась семимильными шагами именно под биты. Транзистор как ключ идеально работал в режиме «открыт‑закрыт». Создание надежных трехпозиционных элементов (триггеров с тремя устойчивыми состояниями) на транзисторах оказалось задачей нетривиальной. Ферриты Брусенцова были прекрасны, но они остались в прошлом, в эпохе магнитных сердечников.
Технологическая изоляция. «Сетунь» была слишком оригинальна. Она требовала иной культуры производства, иного подхода к тестированию и контролю. Казанский завод, привыкший к другим машинам, с трудом осваивал «Сетунь». Брусенцову приходилось месяцами жить в Казани, налаживая техпроцесс.
В 1970 году Брусенцов создал вторую, еще более совершенную машину — «Сетунь-70», воплотившую идеи структурного программирования и троичного RISC. Но в серию она уже не пошла. Лабораторию фактически разогнали, переориентировав на другие темы.
Троичная логика vs. Булева алгебра
Для нас, важно понять еще один аспект — логический. Брусенцов, глубоко погрузившись в тему, пришел к выводу, что двоичная булева логика несовершенна для моделирования реального мира. В ней действует «закон исключенного третьего», тогда как в реальности мы постоянно оперируем понятиями «не определено», «не имеет значения», «может быть».
Он обратился к работам Аристотеля и Льюиса Кэрролла, показав, что трехзначная логика естественным образом описывает ситуации, которые двузначная математическая логика трактует с натяжкой или объявляет недействительными для пустых множеств. В двоичной системе, чтобы ответить на вопрос, нужно сначала задать вопрос: «А уместен ли вопрос?». В троичной системе это избыточно.
С инженерной точки зрения троичная логика давала огромный простор. В двоичной логике мы имеем 2² = 4 унарные операции и 2⁴ = 16 бинарных. В троичной логике количество функций растет чудовищно: унарных — 27, бинарных — уже 19 683, а тринарных (трехоперандных) — миллиарды. Конечно, не все они нужны на практике, но важен сам потенциал для создания мощнейших алгоритмов.

Закат эпохи и современные попытки реванша
После «Сетуни» крупных государственных проектов по троичным ЭВМ больше не было. В 1973 году в США создали эмулятор Ternac на двоичной машине, но это была чисто исследовательская работа. В Академии наук Казахстана в 70–80-х годах пытались объединить троичную систему с модулярной арифметикой (системой остаточных классов) для создания специализированных процессоров для работы с комплексными числами и кватернионами (что важно для управления полетами). Исследователи даже ввели термин «тривалентный эффект» для оценки преимуществ троичного представления вычетов по модулю. Но и эти проекты остались в стенах институтов.
С развитием микроэлектроники проблема трехпозиционных ячеек так и не была решена массово. Создать стабильный триггер с тремя состояниями на тех же кремниевых структурах сложнее, чем двоичный. Исследования в этой области ведутся до сих пор: рассматриваются элементы на базе КМОП‑транзисторов, резонансно‑туннельные транзисторы, нейросетевые модели. Но до промышленного производства пока далеко. Современные попытки вроде TCA2 (2008 год, Калифорния), построенной студентами на 1484 транзисторах, так и остаются лабораторными курьезами. Снова вспомним Фомина с его идеей о том, что троичный триггер дороже лишь в полтора раза. Нет. Увы, нет.
Скрытый текст
Двоичный триггер англоязычный мир называет flip-flop — щелчок туда-сюда. Когда Дональд Кнут (автор книги «Искусство программирования») задумался о троичном будущем, он предложил столь же изящное название: flip-flap-flop. Три слога — три устойчивых состояния. Жаль только, что индустрия так и не дала этому «flap» случиться в массовом производстве.
Заключение
Так был ли у троичной логики шанс? Безусловно. Более того, в определенный момент, в начале 60-х, наша отечественная «Сетунь» этот шанс держала в руках. Это был пример удивительно гармоничной, математически красивой и инженерно совершенной системы. Она была проще, надежнее и изящнее своих двоичных аналогов.
Но история технологий — это история не только идей, но и инфраструктуры, экономики и инерции мышления. Мир выбрал транзисторы, а транзисторы «выбрали» двоичную логику. Строить новую полупроводниковую индустрию под троичные элементы в тот момент никто не решился. Слишком велик был соблазн пойти по проторенному, понятному пути.
Но кто знает, может быть однажды мы упремся в физический предел миниатюризации двоичных транзисторов. И вот тогда инженеры будущего достанут с пыльных полок отчеты Брусенцова и построят на новых физических принципах тот самый идеальный компьютер, который сможет ответить не только «да» или «нет», но и многозначительное «может быть».
Размещайте облачную инфраструктуру и масштабируйте сервисы с надежным облачным провайдером Beget.
Эксклюзивно для читателей Хабра мы даем бонус 10% при первом пополнении.

