Как стать автором
Обновить

Комментарии 100

Система кодирования TREX разработана
Кем разработана?
Предлагаемая система кодирования позволит
Кем предлагаемая?
Троичные компьютеры придумали давно. Подход интересный. Но хотелось бы знать авторов или ссылки на публикации.
Разработана автором, т.е. мной.
Предлагаемая тоже мной :-)
И это, собственно, и есть публикация.

На самом деле, просто это (на мой взгляд) неудачный канцелярит. Какую фразу вы предпочтёте?


  1. «Система кодирования TREX разработана для компактного отображения симметричной ...»
  2. «Я предлагаю систему кодирования для компактного отображения симметричной ...»
Не хотелось выпячивать «Я» :-), поэтому страдательный залог.

Страдательный залог должен быть избегаем!

В этом нет практического смысла даже для теоретиков.
В реальности есть цифровые системы исчисления с фиксированным шагом приращения (x++;), и аналоговая (напряжение и фазовые свойства волны) — с плавающей точностью.
Вся разница в ограничениях применения оператора "++".
В цифровых системах всего два варианта считаются стандартом: двоичная и десятичная. Изобретать тут особо нечего, потому как даже после изобретения — придётся использовать десятичную систему для доказательств и объяснений, что довольно глупо.

А вот аналоговые системы исчисления — не паханое поле.
Здесь уже иная математика, другие законы и правила. Но и возможностей на голову выше.
Приколы начинаются с того что аналоговый вариант просто невозможно записать на бумаге с абсолютной точностью. Так-же событие равенства в такой системе будет бесконечно редким событием.
Можно играться с уровнем напряжения — это достаточно легко, но накладывает несколько фундаментальных ограничений, отчего математические возможности явно беднеют.
Гораздо интереснее играться с фазой сигнала фиксированной амплитуды. В этом случае доступна вся математика без ограничений и нарушений баланса энергий.
Вот оно не паханое поле.
TREX — это скорее название, созвучное HEX.
А TR — скорее сочетание, напоминающее ТРИ (и я знаю, как по-английски _правильно_ пишется «три»)

Прочёл сначала как T-REX, и по-другому теперь не читается (дарю идею маскота ;)).

А чем вам идея специально разработанных симметричных символов не понравилась? Я как то тоже думал над тем как отображать троичные симметричные числа, но так далеко не зашёл, только трит "осилил". Для трита мне в качестве отправной точки понравилась цифра 7 0 и отзеркаленная 7, в идеале нужны совершенно новые глифы один для нуля и пара симметричных и так что бы и рукой писать легко и распознавать с минимальными ошибками. Ну а для трибла соответственно 4 пары симметричных глифов. Переиспользывать буквы или десятичные цифры так себе идея по-моему. Ну и раз уж пошла такая пьянка, то для письма слева на право старший разряд должен быть тадам тадам с право. А то как обычно у арабов цифры позаимствовали и даже относительное расположение разрядов взяли, а то что они с право на лево пишут как то забыли учесть.

Мы же переиспользуем буквы и десятичные цифры в HEX коде? Сначала, когда идет обучение, это выносит мозг, но потом это становится привычным способом написания. С TREX примерно так же.
Что касается создания специальных символов: троичные компьютеры на данный момент находятся в начале своего развития, они очень непривычны, и любая дополнительная новая сущность, как, например, спецсимволы, будет усложнять их разработку, внедрение и принятие техническим сообществом.
Не верно. Уже давным давно и hex-цифры и oct-цыфры и ваши trex-цифры должны иметь собственные кодепойнты и никаким образом мешаться с иными кодепойнтами не должны. Вы систему разработали и это хорошо, но лично ручками вы ничего не парсили — это очевидно. Если бы парсили то учли бы всё.
Таким образом этот ваш трекс должен заиметь удобные кодепойнты прежде всего, а уж как они будут сопоставляться с глифами — это не так уж и существенно. Ваша система годна, почему нет? Но лёгкой заменой шрифта можно получить другую систему, однако же кодепойнты не поменяются и это замечательно.
Более того, ваши группировки трекс-цифр тоже должны иметь кодепойнты, т.к. выводить трексы станет сильно удобнее. Аналогия с hex: «00», «AB» и т.д. т.е. байт должны кодироваться тоже одним кодепойнтом (их 256 штук) ибо это астрономически удобно, подумайте. Более того если сразу закешировать двойные глифы — снизится нагрузка на графическую подсистему и т.д. и т.п.
А вообще, все эти разработки на самом деле требуют колоссально всеобъемлющего подхода, и просто так с наскока вряд ли что-то хорошее получится.

Простите, вы вообще о чём? Вообще-то hex как раз использует два юникодных кодепоинта на байт, которые ничуть не являются уникальными и "мешаются" с цифрами и английскими буквами.


А как там hex будет отображаться на экране — забота того, кто его собрался отображать, а не создателя hex-представления.

Я как раз таки о конкретном, а не «вообще». Какое то «вообще» т.е. абстракции в вакууме меня не интересуют никак.
Вообще-то hex как раз использует два юникодных кодепоинта на байт
Ваш кэп? А выше где то утверждается обратное? Выше написано что хекс-байт должен иметь кодепойнт. Но не два кодепойнта, это глупость. Т.е. легаси. Когда то это было актуально, ну потому что деваться было некуда, но не сейчас. Сейчас есть куда деваться.
которые ничуть не являются уникальными и «мешаются» с цифрами и английскими буквами.
Не с английскими, а с латинскими, если что. Английских букв в юникоде нет и никогда не было. Так вот я всего лишь про то, что «на дворе» уже 21-год, но из произвольной строки написанной на испанском крайне проблематично выхватить хекс-цифры, я бы даже сказал бы ну очень проблематично, причём до такой степени, что иногда эта проблема вообще не решаема. Т.е. в десятичной системе выхватить цыферки не проблема, а шестнадцатеричные цыферки выхватить это тот ещё квест. Нормально же? Т.е. так и должно быть? Серьёзно? Это как испанский стыд. Строка на испанском есть, а стыдно мне. Так вот это всё я вовсе не вам пишу, что либо писать вам бесполезно, это очевидно чуть более чем полностью. Я это автору пишу. Что бы не наступал на легаси-грабли и сразу и всеобъемлюще подумал. Иначе получатся пабрякушки.
А как там hex будет отображаться на экране — забота того, кто его собрался отображать
Это забота сочинителя стандарта. Если сочинитель не откровенно тупой, и ему не плевать на то как оно вообще будет реализовываться, то как раз таки и подумает над этим, прежде чем оно дойдёт до стандарта.
п.с.: Автор, эти трекс-цифры должны быть похожи на буквы, но ни в коем случае не должны быть ими. Нужен стандартный префикс со своим кодепойнтом на это дело, у вас его нет. Или вы хотите 120 префиксов как в хексе? И т.д. и т.п. вот потому то выше и написано:
А вообще, все эти разработки на самом деле требуют колоссально всеобъемлющего подхода, и просто так с наскока вряд ли что-то хорошее получится.
Всему своё время.
Статья написана о системе кодирования. Если она «пойдет в народ», то несомненно будет определен «стандартный префикс со своим кодепойнтом». А до момента признания этой системы кодирования, определение «стандартного префикса со своим кодепойнтом» как раз и будет той самой «абстракцией в вакууме», и поэтому меня пока не интересует.

А, вы к этому серьезно относитесь, я думал это фан статья. Не переживайте вы так, всем похер на троичные числа и уж тем более как они там визуализируются. К сожалению я обделён художественными навыками, а то бы точно нарисовал бы новые глифы для троичной системы, во первых это просто интересно, а во вторых фан и красиво.

Каждый специалист по компьютерам знает, насколько сложно работать с длинными последовательностями нулей и единиц.

Работать с «нулями» и «единицами» это обязанность процессора, а человек работает с программой и обычно фиолетово что в процессоре используется: биты, триты или еще чего.

определение знака числа — по регистру самой старшей цифры

А остальные знаки в разрядах игнорируются? Получается, в пустую теряется часть информации?

при сравнении двух чисел, как положительных, так и отрицательных, больше то число, у которого больше первая отличающаяся цифра, начиная со старшей значащей

Это правило действует для чисел любой системы счисления.
Даже в мире двоичных компьютеров очень много мест, где не обойтись без использования «нулей» и «единиц». И, поскольку с ними (с «нулями» и «единицами») работать некомфортно, то для облегчения восприятия разработаны восьмиричная и шестнадцатиричная системы счисления.
С троичной логикой то же самое. Но, поскольку троичные компьютеры находятся в самом начале своего развития, то до того момента пока на них будут портированы ЯВУ, придется работать именно с тритами и трайтами. И тут система TREX должна помочь.

По поводу определения знака числа: это удобный наглядный способ для программиста. Например, вы вычисляете показатель кислотности pH (который от 0 до 14, т.е. неотрицательный), но видите, что результат вычисления имеет старшую значащую цифру в нижнем регистре. Сразу понятно, что число отрицательное, значит в программе что-то пошло не так.

По поводу сравнения:
в дополнительном коде в HEX: FFh < 01h, хотя F(десятичное 15) > 0 (ноль)
Но, поскольку троичные компьютеры находятся в самом начале своего развития, то до того момента пока на них будут портированы ЯВУ, придется работать именно с тритами и трайтами.

Если бы это было нужно, то уже давно бы сделали. Видать, не судьба троичным компьютерам развиваться дальше зачатка.

в дополнительном коде в HEX: FFh < 01h, хотя F(десятичное 15) > 0 (ноль)

Почему FFh (255) < 01h (1)
Почему FFh (255) < 01h (1)

Потому что в дополнительном коде FFh — это -1, а не 255.

Эти "костыли" как раз и называются дополнительный код.

Этот дополнительный код нужен исключительно процессору для определения отрицательности числа и удобной работы с ним математическими функциями. Для человека отрицательное значение обычно представляется знаком «минус» перед числом.

Но все эти ваши рассуждения нисколько не отменяют того факта, что FFh = -1 в дополнительном коде.

Строго говоря, «дополнительный код» и другие условности не являются частью системы счисления (СЧ), старший бит в signed не имеет численного значения. Так что сравнение чисел в любой позиционной СЧ — по первой различающейся цифре, начиная с более значимых.
Из смысла статьи видно, что речь идет об упрощении работы программиста с отображаемой информацией. Поэтому, если считается, что информация отображается в дополнительном коде, то 0FFh — это минус единица, а не 11111111b, и не набор аналоговых напряжений уровней CMOS/TTL, и никакие ниже лежащие уровни.
Но, поскольку троичные компьютеры находятся в самом начале своего развития, то до того момента пока на них будут портированы ЯВУ, придется работать именно с тритами и трайтами.

Это не так, уже с 60-х ведутся эксперименты, а воз и ныне там. Небольшая оптимальность 3-й системы счисления по сравнению с 2-й нивелируется большим количеством недостатков: сложностью аппаратной базы и программной (если попробуйте выразить дизъюнкцию и конъюнкцию с помощью единственной операции (функции Вебба), то ужаснетесь их сложностью), дороговизной. Это не говоря о том, что все привыкли к двоичной и переползать на троичную будет болезненно.


В общем я не верю, что системы на троичной логике когда-нибудь выйдут в продакшн, а значит ничего на них портировано не будет. Какие-нибудь оптические или квантовые наверняка более перспективны.


А эмуляция не понятно зачем нужна, если все зависит от железа.

Кстати, как вы считаете, могут на квантовых компьютерах «выстрелить» кутриты?

Про это особо ничего сказать не могу, но вроде они не связаны с классическими троичными вычислениями и уж тем более с топиком.

А остальные знаки в разрядах игнорируются? Получается, в пустую теряется часть информации?

Они не игнорируются, они просто не влияют на знак числа. Почитайте как уравновешенные системы счисления работают.

А в чём преимущества троичной системы для вычислений перед двоичной? Я вот вижу одни недостатки.

Статья про другое: если по какой-то причине вы работаете с троичной логикой, то использование TREX может эту работу облегчить.
Что касательно преимуществ троичной системы, то в Интернете очень много материала. Например:
Википедия. Троичный компьютер

А можете всё-таки словами объяснить, пожалуйста? В статье какие-то странные вычисления, основанные на том, что «складывать в столбик в троичной системе быстрее чем в двоичной» (меньше переносов). С одной стороны это правда, с другой стороны - а какова практическая польза с учётом того, что компьютеры оперируют в основном с числами фиксированной длины и на таких числах базовая арифметика и логика всегда выполняется за один такт? Получается, что надо ориентироваться не на скорость работы, а на число транзисторов необходимых для реализации логики (меньше транзисторов = дешевле и проще делать многоядерные процессоры). И вот про число транзисторов в статье ни слова.

Троичный элемент на транзисторах строить ГОРАЗДО дороже, нежели двоичный. Так что до изобретения соответствующей элементной базы троичная техника только теоретическая.

А вообще сильно уменьшается количество проводников между разными блоками в вычислительном устройстве. Но есть куча других минусов, типа, как если тремя уровнями напряжения представлять логику, то при переходе из +1 в -1 происходит переход через третье состояние 0, что может быть нежелательным.
возможно имеет смысл троичную систему применять при разработке физического уровня в проводных телекоммуникациях — их согласуют при помощи трансформаторов.
А те не держат постоянное напряжение, и поэтому невозможно передавать длинные последователь едениц например (3 — 5 и более).
Поэтому в езернете и прочих ISDN передают данные чередованием импульсов в плюс и в минус каждый раз меняя полярность и чередуя их с паузами, т.е. есть коды вида 0+-0-+00-+000+- и тд. что и есть третичная запись. Поэтому её на первых парах явно удобнее обрабатывать как есть, и не тратить два провода вместо одного на этапе обработки самой физики и может чуть дальше

Кодируются не уровни сигнала, а возрастание/убывание сигнала, если вы про манчестерский код. На выходе чистые 0/1 ;)

да, манчестер один из самых популярных, но я про AMI, HDB3 и другие более сложные схемы
Заголовок спойлера
image
Статья не про реализацию троичного компьютера «в железе», а про систему представления информации. Про что, что нет троичного элемента, я знаю. Но кроме реализации «в железе» можно написать эмулятор и с ним поработать. Можно сделать эмуляцию троичной логики на двоичной ПЛИС и попробовать насколько реальны все заявленные преимущества троичного компьютера. Но все эти эксперименты придется проводить, работая с тритами и трайтами. Так что TREX вполне будет применима.
И основной посыл статьи о том, что если вы работаете с троичной системой счисления, то может быть вам будет удобно использовать TREX потому что…

Не поймите меня превратно, я двумя руками за продвижение троичных идей в массы, нужно только лишь чётко понимать, что это лишь игра, и практических последствий нет и скорее всего не будет.

Практические последствия могут наступить, если, например, «выстрелят» кутриты.
Материала очень много, только он однообразен больно, и весь ходит вокруг сильно притянутого за уши числа Непера.

Призываю haqreu за экспертным мнением!

А чего тут анализировать-то? Как по мне, никакой практической задачи тут не решается. Автор предлагает использовать цифробуквенный код для записи чисел, но не предлагает ни одного сценария использования этого кода. Человеку с ним всё равно работать неудобно, все привыкли к десятичной записи, а компьютер не этими символами оперирует. И смысл тогда?

Собственно, и с шестнадцатиричным кодом сегодня уже практически нигде не работают руками…
Чтобы проверить насколько перспективен троичный компьютер, можно написать эмулятор. Писать эмулятор и сразу под него ЯВУ никто не будет. Поэтому придется некоторое время работать с тритами и трайтами. И там TREX может решать _практическую_ задачу компактного представления информации на экране.
Один из эмуляторов я уже написал :)
github.com/ssloy/triador

Прикол в том, что даже в моём низкоуровневом ассемблере у меня нет напрямую тритов, программист работает с числами, записанными в десятичном виде. И мои эксперименты пришли ровно к тому же выводу, что озвучил GennPen: для программиста биты/триты вообще мало что меняют. Он работает с переменной, а как она там внутри в памяти представлена — очень редко когда нужно знать.
Я правда не дописал свой (последние полтора года проект заморожен), но у меня он похож на TurboDebugger, так что там и дамп памяти, и содержимое регистров, и код все в тритах и трайтах. И TREX там очень удобен. (Не знаю, как в комментарий вставить картинку со скриншотом)
Добавил скриншот в конец статьи.

Неплохая идея.


Я вижу небольшой недостаток: чтобы "в уме" преобразовывать из восьмеричной системы в отдельные биты, требуется помнить таблицу из 8 значений (0 — 000, 1 — 001, ...), из шестнадцатиричной — 16 значений, а тут — целых 27. Хотя можно взять урезанный вариант из двух тритов, остановившись на D/d.

<Режим зануды>
Двоичный процессор имел бы однобитовые регистры, двоичный компьютер и соответствующий язык программирования позволил бы адресовать один бит с помощью указателя, объявлять соответствующие однобитные переменные.

То есть у нас нет сегодня двоичных компьютеров, в основном все компьютеры 256-ричные. Процессоры может быть внутри работают с битами, но все наши языки программирования и соответствующее им железо работает с 256-ричными цифрами (называют их байтами). Это минимальная единица, которую можно адресовать в памяти, минимальный размер которым оперирует регистр процессора. Это и есть наши цифры.
</Режим зануды>
Почему вы решили предложили закрепить за трайтом 9 трит, а не 6 трит? Объяснение в абзаце не удовлетворило. Для кодирования символов не нужно расширять до девяти трит. Достаточно использовать два шеститритных трайта для кодирования 531441 символов. Ведь для кодирования символов байты не расширяют до десяти бит, скажем. Просто используют многобайтовое кодирование.
Касательно наименования для двадцатисемеричной системы счисления. HEX исходит к слову hexadecimal — шестнадцатеричная. То для двадцатисемеричной уже будет twentysemeral (использовал онлайн-переводчик). То отсюда должно быть TWE, TWS и так далее и тому подобное.
Использование различных регистров для кодирования интересное, но не слишком ли опасное? В плане опечатки регистров. Ведь нередки случаи опечатки при наборе текста, кода и так далее. Да и некоторые языки программирования нечувствительны к регистру.
То для двадцатисемеричной уже будет twentysemeral

"икосигептимальная" скорее, hexadecimal это все-таки с греческого.

Согласен. Дал маху. Просто считаю, что нужно обозначать так, чтобы можно чётко понять, как расшифровывается.
По поводу 9 бит: IMHO, если мы уходим на троичную систему счисления, то по максимуму должны использовать размерности, кратные трем.
По поводу многобайтового кодирования: изначально было заложено 1символ = 1 байт и многобайтовое кодирование это способ выкрутиться из ситуации, которая бы не возникла, если бы под кодирование символа изначально выделили больше байт (точно так же, как и с первым мегабайтом памяти в IBM PC).
По поводу названия: нужно же было как-то назвать :-)
По поводу регистров — да, это «засада», но обеспечивающая наглядность, что важно при начальном освоении троичной системы счисления. За какое время _начинающий_ программист осваивается с восьмиричной и шестнадцатиричной системами счисления? Было бы неплохо это время уменьшить? И с троичной системой так же, я полагаю.

Начинающие программисты нынче вообще не разбираются в системах счисления, сегодня начинающие программисты должны уметь разбираться в концепциях питона, вебпака и прочего. А байты, биты и все такое - это предмет низкоуровневых оптимизаций.

Я согласен, слово «сегодня» все ставит на места :-) В этом случае вы правы. Потому, что «сегодня» для двоичных компьютеров можно начинать программировать сразу на ЯВУ. С троичными компьютерами так не получится. Сначала придется посидеть в отладчике и ассемблере и поковыряться в дампах. А потом — да, портирование ЯВУ и дальше все, как вы написали.

изначально было заложено 1символ = 1 байт 

Это не есть правда.

Существовали и 5-битные и 7-битные кодировки.

Хуже того и байт далеко не всегда и не везде был 8 бит

Про длину байта я знаю.
И про разные кодировки.
Мысль была о том, что неплохо бы сразу заложить разрядность с запасом.

сокращения времени освоения троичного компьютера (который когда-нибудь уже будет создан)

статья видимо переводная?

неожиданно окажется, что ЭВМ на троичной логике были созданы в прошлом веке в СССР.

"Сетунь" была разработана в промышленную эксплуатацию в 1959 г.

И как у Сетуни успехи за последние полвека? Есть хоть одна живая?
Обобщим: как успехи у троичных компьютеров в целом? Хотя бы исследовательских.
У Сетуни было фатальное преимущество: ферритовая память внутри троичная. Но как только научились делать дешевую память на электрических зарядах (внутри двоичную) — это преимущество стало недостатком. Троичная логика как надстройка над двоичной никому не нужна.

А есть какие-то современные эффективные способы хранения именно троичных состояний? Я вижу лишь такой вариант: два уровня напряжения, а между ними — неопределённость, как третее значение.

Это очень сильно усложняет ячейку памяти. С магнитной памятью проще - у неё 3 состояния by design.

Как это ферритовая память была троичной? Если я правильно помню, там было два колечка, одно состояние было неиспользуемым.

В исходной «сетунь» было именно так, в «сетунь-70» ячейка памяти базировалась на одном кольце, которое могло быть либо намагничено в одном из 2-х направлений, либо размагничено.

О, а это любопытный момент. Можете подсказать источник? Я сходу не нашёл...

У меня стойкое ощущение, что я это видел на одном из тематических форумов. Но вот тоже пошел искать и вижу только это. Что заставляет меня думать, что может быть я не прав.
Напомнило мне систему счисления с основанием -2. Она позволяет хранить знак прямо в числе, а правила работы остаются те же, и даже компьютеры могут с ней работать легко, ибо для записи нужны тоже только 0 и 1. Но вот на практике она не прижилась, увы…

В целом идея интересная, но хочется подробностей применения. Математика, троичные сдвиги (на один триб, триплекс), дополнительный код (он нужен?), примеры реальных данных на N трибов в памяти и т.д.


Попробуйте нарисовать экран обычного hexdump в этой штуке, чтобы понять насколько оно хорошо.

Математика: что именно?
Кольцевой сдвиг на трибл вправо: ABC >> 3 = CAB
Дополнительный код не нужен.

ОФФТОПИК: У меня есть пример дампа (в виде файла на диске), но не могу понять как его можно прикрепить в комментарий.

Математика: что именно?

Число Pi например. Математике все равно, как числа закодированы, главное, чтобы математические операции работали.

Это, кстати, очень хорошая мысль. К примеру, двоичный поиск - как его организовать в троичном компьютере, если он не умеет легко делить на 2?

Только не предлагайте троичный поиск, я даже боюсь представить, как бы выглядел его алгоритм :)

Вообще, компараторы, используемые в (двоичном) поиске/сортировке, обычно возвращают как раз троичное значение (больше/меньше/равно).

Ну будет там операция деления вместо сдвига — на асимптотику это не повлияет.

А что плохого в троичном поиске, если у вас триты вместо битов и троичный выбор самоочевидный по плотности? Бинарность — она такая. Стоит задуматься от тренарности, как некоторые вещи становятся весьма любопытными.

А что плохого в троичном поиске

Без ALU, которое умеет в троичное сравнение, все плохо. Будет обычный двоичный поиск, только не оптимально работающий.

Разумеется. Если мы используем трайты и прочие "три-", то это делается в рассчёте на троичную логику снизу. Без неё это всё — 2 бита с одним забаненым состоянием (так себе удовольствие).


Отсутствие производительных компьютеров совсем не повод закапывать идею как математическую конструкцию. У троичности есть масса плюсов (например, троичные флаги позволяют передавать больше состояния), симметричность в математике. В конце-концов, 3^9 (3^3^3) — это почти 4КБ. Прям слюнки текут.

симметричность в математике


Она и так есть. А наличие дополнительного кода в записи отрицательных двоичных чисел — для упрощения ALU, а не для неудобства программистам.
Опять же статья не о программировании, а об удобстве компактного отображения троичной информации.
По поводу числа Pi: вы имеете ввиду как оно будет представлено? Не знаю, но думаю, это может быть аналог кодирования с плавающей запятой в двоичных компьютерах, с тем лишь исключением, что мантисса и порядок сразу будут включать в себя знак.
По поводу двоичного поиска: как уже было сказано выше amarao троичные флаги имеют три состояния. Следовательно, и команды условного перехода в троичном ассемблере будут изменены. Если в x86 для флага Z мы имеем, например для JZ, переход в случае нуля:
JZ M1
; Z=0
...
M1:
; Z=1
...

то в троичном варианте это будет выглядеть как тройное ветвление по знаку:
JZ M1, M2
; Z=0
...
M1:
; Z=+
...
M2:
; Z=-
...

Если вы объедините ветки, например, для "-" и "+", то получите эмуляцию двоичного условия.
Поиск так и остался двоичный. Каждая итерация делит интервал не на 3 части, а на 2.

У вас может объединение операции сравнения (match) и выбора ветки. Радикально фета оно не поменяет, а множетель — может.

Выше был вопрос про реализацию двоичного поиска.

У троичной системы есть объективные математические достоинства (симметричность относительно знака при округлении) и недостатки (сложно реализовывать).

Будем обозначать наши троичные цифры как 0,1,2. Тогда переход в следующий разряд будет 10,11,12. Тогда 2+2 будет равно 11 в такой троичной системе.
А как сложить 2+2 в системе счисления -,0,+

Вы какую-то другую систему изобретаете. В статье -+0 используют.

Значение «два» в системе {-;0;+} выглядит как «0+-»
Поэтому «два плюс два» — это: «0+-» + «0+-» = «0++»
В TREX: «B»+«B»=«D»
Спасибо. Чем-то напомнило сюрреальные числа. А можно на аппаратном (или программном) уровне реализовать такую логику, которая бы обеспечивала работу с сюрреальными числами?

Что значит — как? В столбик!


В уравновешенной троичной системе число 2 представляется как (+-), значит надо сложить два (+-).


Младшие разряды: (-) + (-) = (-+), плюс отставляем, минус уходит в перенос.
Старшие разряды: (+) + (+) + (-) = (+).


Итог: (+-) + (+-) = (++).


Собственно, ответ ни разу не удивителен, поскольку (++) является представлением числа 4.

Спасибо
Добавил скриншот в конец статьи. Только получился не hexdump, а trexdump :-)

А почему колонок 12? 9 же должно быть. Плюс, у вас подозрительно низкая плотность текста (справа) для 27-ричной системы.


Но в целом, эта картинка объясняет больше, чем весь пост. Спасибо.

Это не относится к теме статьи, поэтому на вопросы ответил в личку.
НЛО прилетело и опубликовало эту надпись здесь
Эта проблема и сейчас существует.
И ноль по этой же причине перечеркивают. Чтобы не путать с большой «О»
Вопрос к шрифтам, а не к системам счисления.
И ноль по этой же причине перечеркивают. Чтобы не путать с большой «О»
Буква О не входит в запись чисел.
При использовании системы TREX предлагается трайтом называть девять троичных разрядов

Лучше уж 3 трита взять. Компьютеру вообще без разницы, а человеку с числом на 9 вариантов работать проще. Вон для двоичной системы сколько восьмеричная запись держалась. На 16-ричную перешли только со стандартизацией 8-битного байта, он очень хорошо на две цифры раскладывается.
Так и у вас. Даже если использовать буквы, то с диапазоном dcba0ABCD работать проще, чем с m...a0A...M. Ну будет три цифры в вашем машинном слове, ну и что. Зато считать удобнее. Будет новемичная (от novem) система
9 вариантов — это два трита, а не три.
3 трита в трибле и 3 трибла в трайте, т.к. логично в троичной системе везде использовать степени тройки.
Да, точно.
Но в технике между логичностью и удобством обычно выбирают именно удобство. Увы, но к уравновешенной системе человек не привык, к цифрам до 27 тоже. Если уж 16-ричная система проблемы вызывает, хотя там всего 6 лишних цифр.

Кто-то просил практическую задачу, легко — сигма-дельта модулятор с 3-мя уровнями квантования (в литературе иногда обозначается как 1.5-битный модулятор). Это позволяет при отсутствии сигнала иметь 0 на выходе, в то время как у 1-битных модуляторов всегда будет шум низкой амплитуды.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории