Недавно наткнулся на интересную статью: http://www.computery.ru/upgrade/numbers/2004/175/history_175.htm Интервью с создателем троичной ЭВМ. Сетунь называлась. Наш соотечественник сделал такую в 50-х годах еще. Почему три? Один бит для положительных чисел, один для отрицательных и один для нолика. Была выпущена небольшая партия. Хм, все работало... Цитата: "Когда Дейкстра выступил с идеей структурного программирования, мы увидели, что сделали машину как раз для реализации его идеи. Программирование на "Сетунь-70" было даже не структурированное, а структурирующее. Программы получались легко читаемыми и осваиваемыми, легко модифицированными. Главное, что программы не подвергались отладке, а делалась так называемая контрольная сборка. После того как программу сверху вниз написали, ее проходили снизу вверх. В хороших КБ всегда так делается - типичный конструкторский прием. После этого программа оказывается, как правило, безошибочной. Позднее "Сетунь-70" была эмулирована на двоичных машинах в форме диалоговой системы структурного программирования ДССП." Меня самого такие факты наводят на мысль - а есть ли истина в точных науках, когда возможны такие радикальные альтернативные пути? И уместно-ли вообще выражение - точные науки? IMHO занятно.
Просто подкину несколько ссылок по теме: hттp://www.computer-museum.ru/histussr/12.htm hттp://www.hardnsoft.ru/magazine.php?issue=108&article=613 hттp://college.biysk.secna.ru/muskomp/setun.htm hттp://www.icfcst.kiev.ua/SYMPOSIUM/Proceedings/Brusentsov.doc
captain cobalt: Спасибо, на первую ссылку сам наткнулся, как раз сейчас и читаю, остальные буду смотреть. himself: "Почему три? Один бит..." Каламбур получился. В троичной арифметике используются триты. Наверное будет лучше сказать: "одна сущность для положительных чисел, одна для..." Господи, ну почему РОЛ так тормозит, а? ((((
в форте есть переменная BASE, так вот туда можно записать любое число, в том числе и 3, и баловаться в троичной системе. когда я писал форт (для 580ВМ80), то разрешил все символы латинского алфавита, те, теоретически мог пользоваться 10+26=36-ричной системой, но я пробовал только 17-ричную (просто интересно было
Наиболее поразителен следующий факт: В i8008-derived архитектурах, в том числе IA32 есть четыре флага: -- нуля -- переноса -- знака -- переполнения Такое их количество объясняется существованием разных в форматов для знаковых и беззнаковых чисел. В "Сетунь" числа всегда знаковые и функции всех вышеперечисленных флагов с успехом выполняет один троичный флаг (обозначаемый ω).
если в сетуни есть умножение, то переполнение тоже должно быть. в 8080 не было умножения, и переполнения тоже не было, так как сложением/вычитанием нельзя переполнить больше чем на один бит (который попадает в перенос) а если числа всегда знаковые, то это сужает их диапазон, так как в некоторых задачах все числа натуральные, а разрядов вечно не хватает. но от троичной системы веет конечно чем-то таинственным
Переполнение возникает при сложении / вычитании знаковых чисел. Флаг назывался Parity/Overflow (P/V). для операций типа add/sub - overflow, or/and - parity.
Читал математическое доказательство, что троичная система самая компактная. Книжка "Системы счисления"
это в сетуни? в 8080 я такого не помню (может в Z80, но я на нем не успел повышивать, и я слышал в некоторых клонах также было умножение, но без переполнения - 8-битные исходные и 16-битный результат) помню только 5 флагов - ноль, знак, перенос/заем, частичный перенос (для даа и четность. доб: а если OF у х86, то почему "назывался"?
Shoo: >"если в сетуни есть умножение, то переполнение тоже должно быть..." Товарищи, если создатель говорит, программы получаются безошибочние, то это воистину Дзен! Да нет, вроде, я конечно могу ошибаться, но переполнение происходит не из-за умножения, правда с асмом я незнаю как быть: "В старых языках программирования (фортран и т.п.) при обращении к элементам массива компилятор, как правило, не предусматривает проверок, выходит ли индекс за границы массива. В другом старом языке — C, где с массивами можно работать с помощью указателей — подобные проверки вообще могут быть невозможны. В таких условиях, если происходит ошибочное обращение к несуществующим элементам массива, то программа просто считывает содержимое ячеек памяти, никакого отношения к данному массиву не имеющих, либо записывает туда какую-то информацию, портя содержимое других переменных, возможно, в других программах, и затем продолжает свою работу, уже скорее всего бессмыссленную. Когда было обнаружено, насколько велика доля ошибок, связаных с выходом за границы массивов, в компиляторы стали добавлять возможность включать в код проверку индексов на предмет выхода за границы массива. Но это обычно делается, только если компилятор работает в специальном "отладочном" режиме." Т.е. в продвинутых высокоуровневых языках такой проблемы вообще нет! Взято отсюда: http://www.inr.ac.ru/~info21/blackbox/disciplina/arr_bounds_checks.htm >"в форте есть переменная BASE, так вот туда можно записать любое число, в том числе и 3, и баловаться в троичной системе" А ты уверен что баловался именно в троичной систем? Исли я не прав, то заранее извиняюсь, но ты кажется работал с 17-ю битами. А в сетуни используются имено триты. Это уже не Булева логика. В троичной машине действуют совершенно отличные от привычной математики законы. И если ты так запросто мог баловаться с троичной логикой - то ты просто гений в своей области я снимаю перед тобой шляпу. >"а если числа всегда знаковые, то это сужает их диапазон..." Мы имем дело не с битами, а триты позволяют меньшим их количеством кодировать числа - диапазон на самом деле расширяется. Или 2^32 или 3^32 - есть разница? Для построения троичной машины потребовалось в несколько раз меньше логический элементов при равной вычислительной мощности с двоичной. Да уж, таинственног там столько, что аж дух захватывает...
Dimaska 1.ну, я ваще имел ввиду исключительно асм, а точнее даже не асм, а работу процессора. мне известна команда bound в х86, но я не видел, чтобы ею пользовались, тк она вызывает прерывание. 2.у меня нет специального математического образования, но баловался я в разных системах. например, если в base записать +3, а потом сделать 2 2 + ., то машина писала мне 11. это в какой системе, если не в троичной? а то что это число хранилось как 0000000000000100b - это и так понятно, ведь я ж не на сетуни баловался. а вот в 17-ричной системе больше нигде не побалуешься, так как известные мне форт-системы не позволяли использовать для цифр символы больше F, а в моем форте я позволил до Z. то есть, можно было записать в base 36, тогда ZZ было бы 36*35+35=(много) 3.насчет одно трита на все флаги - тут нужно поприкидывать - пока для меня это слишком абстрактно, может, похожу по твоим ссылкам. 4.а насчет того что меньше логических элементов - так зато элементы сами сложнее. это то троичную логику и погубило, как и то, что она нечетная.
да, кстати о тритах - я вроде слышал, что пол. импенданс - 1, отрицат - -1, а 0 - 0, а ты что-то говоришь о трех битах. ну щас уже не разберусь, тк у нас кон раб дня
я имел ввиду системы с осн. больше 16, так как далее начинался конфликт со встроенными словами, тк в форте число не обязано начинаться с нуля (ну по край мере те что я видел)
Полазил я по этим страничкам (+ google, + яндекс), вот только не нашёл ешё ничего чётко описывающего троичную логику (прежде всего операции). Не могли бы вы ссылочку подбросить об этом?
Ага, вот ещё тема на Васме где троичная логика обсуждалсь: http://www.wasm.ru/forum/index.php?action=vthread&topic=2416&forum=10&page=-1 Хмм... а может бы сделать эмулятор Сетуни ? Частичное его описание есть на одной из страничек... Написали же Гатес и Алан эмулятор компа, которого никогда не видели
Gleber: Так ведь уже был сделан эмулятор для микрокомпутеров, называлось это - Диалоговая система структурированного программирования. Была сделана в 1980-1982 гг. Для наших ДВК'шек. Вот ссылка на нее: http://www.computer-museum.ru/histsoft/dssp.htm >"...вот только не нашёл ешё ничего чётко описывающего троичную логику (прежде всего операции)" А ты думаешь зачем я Алису в теме упомянул? Льюис Кэролл в 25 лет стал магистром математики. Странные он сказки пишет, правда? Все его работы были из области логики - троичной, вот только понять их - эта та еще, задачка Еще у Дейкстры что-то есть что-то по этому поводу, только что скачал, буду смотреть... Я уже налазился по яндексу - материала хватает, прочитатать бы это все, да и еще понять... shoo: >"у меня нет специального математического образования" А мне так математика буквально с детсва не давалась... Единственная тройка в аттестате. >"... так зато элементы сами сложнее. это то троичную логику и погубило, как и то, что она нечетная." Вообще-то Брусенцов писал что можно на современных интегральных схемах сделать троичный вентиль, только деталей я не понял, может у тебя получится? Элементы то сложнее, как и сама троичная логика, только с друго стороны эта логика ближе человеческому мышлению, понять ее легче. Для первой версии Сетунчика даже ассемблер придумывать не стали, мол и так, троичный код очень нагляден. Гуманитарии прогаммы составляли на нем. Нонсенс... Еще у того способа которым программы безглючые делали есть интересная связь в фортом, потом распишу, когда обмозгую эту мысль до конца.
Всётаки нашёл я что-то подходяшее : http://www.aymara.org/ternary/ternary.pdf Основы там прописаны... Dimaska, я имел в виду эмулятор на нашы PC, под виндой или линухом - пофиг, а просто чтобы разобраться с троичной логикой и такими же компьютерами на практике Авось что-то интересное из этого выйдет.
>в форте есть переменная BASE, так вот туда можно записать любое число, в том числе и 3, и баловаться в троичной системе. когда я писал форт (для 580ВМ80), то разрешил все символы латинского алфавита, те, теоретически мог пользоваться 10+26=36-ричной системой, но я пробовал только 17-ричную (просто интересно было В Форте значение BASE влияет только на операции ввода-вывода и на исполнение слов, выполняемых в режиме интерпретации. А так все переменные хранятся как обычные двухбайтные (в оригинале) или четырехбайтные (в современных версиях) значения. И значения там используются из интервала [0..2], а не [-1..1]. Так что это совсем другая история.
офигенное усложнение кстати - 4 транзистора на инвертор, вместо двух. для ядра проца еще ничо, но вот кэш!!!! вместо 256Кб - будет даже не 128, так как емкость удваивается, а время експонента. 64К L2+ 8-4K L1 = жестоко будет.
shoo > Вот я про него и говорю. Чётность - для команд or, and, xor Для команд сложения и вычитания он работал как флаг переполнения. И в зилоге, и в 8080. Ещё 6й флаг - N - флаг сложения/вычитания, он использовался неявно командой daa, т.к её действия различны после сложения и вычитания. Почему-то на IA-32 от этого флага отказались, и сделали отдельные инструкции daa / das.