- Существуют ли троичные машины, сопоставимые с «Сетунью-70»?
- Насколько мне известно, нет. Алгоритмов же написано много. Есть множество патентов как на электронику, так и на алгоритмы, которые упоминают и применяют в той или иной степени как классическое троичное представление данных (то есть смещённое от нуля — «один» и «два»), так и уравновешенное — «минус один», «ноль», «плюс один». Но я не слышал, чтобы кто-то пытался их серьёзно применять на практике. Известно, что студенческие коллективы предпринимали попытки построить подобный компьютер в Штатах, во Франции и в Новой Зеландии. В Испании построили троичный процессор с небольшим количеством памяти, но сейчас о нём уже ничего не узнать, кроме названия. Это сделали лет восемь назад, были публикации, но потом всё это пропало.
Троичных вычислительных машин, по-моему, никто не делает, полнофункциональных процессоров — тоже. При этом в области обработки цифровых сигналов широко применяются знакоразрядные системы исчисления, которые фактически эмулируют уравновешенное троичное представление на двоичных процессорах. То есть берутся два бита, один из них означает знак, а четвёртое состояние соответственно либо не используется, либо используется в отладочных целях.
- Зато у вас есть два эмулятора «Сетуни».
- Один есть и доступен уже года три. Он эмулирует первую «Сетунь», ту, которую разработали в 1959 году. Эмулятор интересно устроен — в виде веб-приложения: на страничку заходишь, там перед тобой фактически один в один модель панели той самой «Сетуни». Эмулятор называется «Сетунь ВС». Можно двигать переключатели и всякие ползунки, запускать машину на счёт, переключать режимы. Но для освоения придётся прочесть книжку (которая есть в интернете, кстати) «Малая цифровая вычислительная машина Сетунь».
Второй эмулятор — это уже попытка эмулировать «Сетунь-70». Пока он не подходит для посторонних: тот, кто знает, что делает, может собрать и запустить его, а все остальные, скорее всего, не разберутся. С помощью этого симулятора мы надеемся рано или поздно получить возможность запускать программы для «Сетуни-70», которые сохранились в распечатках, на перфолентах и в других источниках.
- Как я понимаю, сейчас вы восстанавливаете программу из ПЗУ?
- Недавно была получена пачка листочков, на которых были распечатаны данные ПЗУ. К сожалению, есть одна сложность: никто точно не знает, в каком порядке нужно располагать эти страницы. Так что сейчас будет длительная работа с попыткой подобрать, посмотреть, какие части кода к чему подходят.
- После этого можно будет получить готовую «Сетунь-70»?
- Можно будет запускать все доступные алгоритмы, но часть требует разных аппаратных устройств типа терминалов, информации о которых у нас нет. Поскольку «Сетунь-70» существовала в единственном экземпляре, для нее не так много программного обеспеченья, как для первой «Сетуни». Она использовалась по большей части для нужд МГУ.
- Как программировали «Сетунь-70»?
- У программистов «Сетуни-70» был достаточно развитый инструментарий. В нём имелся, по- моему, ассемблер даже и то ли транслятор Фортрана, то ли компилятор Алгола.
- В коде приходилось как-то учитывать троичность?
- Есть операции перехода, которые в зависимости от знака тебя переводят. Если минус, то по одному адресу за одну операцию, если ноль — то по другому, если плюс — то по третьему.
- Какие алгоритмы больше всего выигрывают от троичной логики? Обход бинарного дерева?
- Да, с ними троичные машины работают эффективнее, чем двоичные. В двоичном при обходе можно либо «попасть», либо «не попасть», а тут ты либо «перелетел», либо «попал», либо «не долетел». Так значительно проще понять, что делать дальше.
Собственно говоря, разницу между двоичными и троичными подходами в строении вычислительных машин можно проиллюстрировать на примере пешеходного перехода. Если рассматривать с точки зрения двоичного — ты можешь двигаться по переходу только в одну сторону. Если с точки зрения троичного подхода — ты можешь переходить как в одну сторону, так и в другую. Не приходится, как в случае с двоичным, бежать до следующего перехода, если этот только в обратную сторону. К тому же при троичном представлении данных в ячейке памяти умещается больше значений — диапазон шире. Это значит, что для того, чтобы представить число, этих ячеек понадобится меньше.
Плюс у уравновешенного троичного кода (его по-разному называют — уравновешенный, сбалансированный) есть преимущество: каждый разряд содержит знак того значения, которое содержится в этом разряде. В данном случае у нас минус один, ноль и плюс один. Для того чтобы выяснить, какой знак у всего числа, содержащегося в ячейке, достаточно взять первый ненулевой разряд и посмотреть, какой у него знак.
В двоичной системе берёшь ячейку и смотришь: если там единица, то соответствующую степень двойки надо добавить к общей сумме. В случае с троичной системой если в ячейке плюс, то степень тройки необходимо добавить, а если минус, то вычесть. И соответственно там может лежать и отрицательное число, и положительное, и нулевое. Здесь очень интересно проявляется особенность, которая есть во всех уравновешенных системах счисления — у них наилучшее округление. Не нужно никаких специальных алгоритмов для того, чтобы округлить число, достаточно просто отбросить ненужные знаки, и в оставшихся разрядах автоматически получится лучшее приближение числа.
Уравновешенное троичное представление имеет интересную особенность: поскольку оно уравновешенное, то содержит как положительные, так и отрицательные значения. То есть можно в некоторых алгоритмах добиться существенного прироста, например при сжатии. Здесь не нужно всегда только увеличивать словарь — в какой-то момент его можно и уменьшать. Это тоже даст небольшой выигрыш. Результат сжатия файла будет поменьше, чем у двоичного с тем же самым алгоритмом.
- Говорят ещё про удачное применение в механике, где троичный разряд описывает не только наличие тока, но и направление вращения ротора.
- Да, по своей природе уравновешенная троичная система исчисления позволяет обозначить одним разрядом не только включение и выключение мотора, но и включение со вращением в одну сторону и включение со вращением в другую сторону. Например, минус один — налево, плюс один — направо, ноль — не крутить вообще. Это удобнее, чем в двоичной системе, где сначала надо задать направление, а потом включить двигатель. На одно действие меньше.