Вчера попал на этот чудный форум! Прочитав статью на хабре администратора. Зачитался тут темами, что не заметил, как и утро наступило Спасибо за толковый и полезный контент! Но помимо благодарностей хотел бы и свои "пять копеек" внести. По поводу конвертации систем счисления из одной в другие и т.д. В случае с троичной системой не нужно 9-иричную никакую , как и 8-ая в двоичной - давно архаизм. На заре "двоичности" Oктет был популярен тем что упрощал счёт. Сейчас уже давно никто не заморачивается такими переводами. Только в виндовс калькуляторе OCT, как экзотика, ещё присутствует. А вот HEX востребован в двоичной. Аналогично и в троичной больше 27-иричная СС актуальна. Встречал тут термин "триада" применительно к 3 тритам. По мне это не верно. Хотя ещё стандартов вроде тут никаких нет, нет ещё такой путаницы , как с приставками Си и бито-байтами(типа кило, мега, гига и т.д. в Си 1 в 10 степени = кило, у кого то 2 в 10 степени кило почему то получается) но мне всё условно правильно представляется так, как хотел бы изложить ниже. Единицы хранения информации Бит(bit) - происходит от латинского bis(дважды). Трит(trit) - скорее происходит от логической связки с битом, ну и с латински числительным сочетается - tria(три). Хотя это не трижды никак. Производные от базовых единиц Байт(byte) - в двоичной системе счисления 8 бит. Он же октетом именуется, т.к. октет это 8-ка. Остальное логическое соотв. Дуэт - в троичной системе счисления 2 трит. Терцет(или трио, но никак не триада) - в троичной системе счисления 3 трит. Квартет - в троичной системе счисления 4 трит. Квинтет - в троичной системе счисления 5 трит. Секстет - в троичной системе счисления 6 трит. Септет - в троичной системе счисления 7 трит. Октет - в троичной системе счисления 8 трит. Трайт - в троичной системе счисления 9 трит. Последнее - аналогия с байтом опять таки. Т.к. байт это 2 в степени 2, трайт - 3 в степени 2. Хотя это всё условно и зависит от того как будет принято сообществом. Трайт=9тритам очень большое количество значений имеет. Считать его словом накладно. 4-5 тритов в памяти просто без дела в большинстве вариантов лежать будут.А процессор только туда сюда бестолковые старшие нули гонять. Которые никакой информации не несут. В Сетуни за трайт было принято 6 трит, т.е. секстет! Оптимальный размер трайта примерно в пределах 5-6 трит должен находиться(243-729 значений). Сокращения принятые в обозначении систем счисления DEC - сокращение от deca(10-и). Обозначает десятичное основание системы счисления. HEX - сокращение от hexadeca(16-и) и обозначает шеснадцатиричное основание системы счисления. HEP - сокращение от heptacosa(27-и). Обозначает двадцатисемиричное основание системы счисления. OCT из той же греко-римской серии... Представление числа Числа в десятичной(DEC) системе представлены цифрами от 0 до 9. Числа в троичной системе представлены цифрами от 0 до 2-х или от -1 до +1. Числа в HEP до 10-го знака представляются цифрами от 0 до 9, а от 10-го до 27-го знака символами латинского алфавита от A до S. Из очердёности алфавитного ряда исключены сымволы I и O из-за их визуальной схожести с 0 и 1. Конвертер- калькулятор перевода из DEC в HEP и троичную систему в виде html страницы прикреплён к посту. Помимо прочего я ещё там реализовал представление в цвете RGB. Полезно бывает когда на ряд светодиодов смотришь считать
Attachments:
File comment: При желании можно добавить перевод и в другие системы. калькулятор.zip [1.46 KiB]
Downloaded 115 times
20 Mar 2023 21:52
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22619 Location: Silicon Valley
А где-то есть реальный сайт, где этот код крутится?
P.S. Сначала перенёс вышестоящее сообщение в отдельный топик, а потом решил вернуть сюда (раз уж мы от джавы плавно перешли к абстрактному "онлайн")...
Пришло время переписать мой конвертер с джавы на что-то более дружелюбное для современных браузеров - в частности как я недавно показал писать можно прямо на языке Robby (чтобы в случае чего можно было легко портануть такое онлайн-приложение на поддерживаемые nedoPC SDK ретро-компьютеры) и оно будет запускаться в браузере с помощью моего фреймворка Rgrid,js. Заодно можно кое-что из конвертера Лавра реализовать
Основой джавовской версии конвертера являются вот эти 2 функции, переводящие число в троичное представление и обратно:
Code:
public static String toTernary(int num) { int n,m,k; String s = null; k = 387420489; for(int i=0;i<=18;i++) { n = num/k; num -= n*k; m = k/2; if(num>+m){n++;num-=k;} if(num<-m){n--;num+=k;} if(n!=0 && s==null) s=""; if(n==-1) s+="N"; if(n==0 && s!=null) s+="O"; if(n==1) s+="P"; k /= 3; } return s; }
public static int fromTernary(String s) { int n = 0; int k = 1; for(int i=s.length()-1;i>=0;i--) { char c = s.charAt(i); if(c!='N'&&c!='O'&&c!='P') return 0; if(c=='N') n-=k; if(c=='P') n+=k; k *= 3; } return n; }
Тут предполагается, что используются целые 32-битные числа со знаком, а Robby как известно работает с 16-битными целыми числами со знаком, хотя я планировал некоторые хитрости с переполнением (наличие регистра старшего слова результата H - см. тут) и JS-реализация уже всё считает в нативных целых числах без явных ограничений на 16 бит - обрезается оно только при сохранении в память или регистры. Разраядность троичных чисел у меня в конвертере до 18 (константа 387420489, которую можно видеть в функции toTernary это 3^18). Если допустить отображение "binary coded ternary", то надо будет до 36 битов поддержать, значит для круглоты - 48 бит, а для всеобщей охватываемости можно ещё и опцию отображения 64 битов добавить (это будет до 40 тритов в непосредственном отображении либо 32 трита в режиме "binary coded ternary") - явное задание двоичной разрядности нужно для того, чтобы корректно отображать отрицательные числа (все старшие биты у которых будут заполнены единичками).
По интерфейсу - делаем как и было: - троичное представление (NOP), - десятичное (0...9), - шестнадцатиричное (0...F), - двоичное (0,1), а также до кучи: - восьмиричное (0...7), - девятиричное (DCBA01234 как в Тунгуске), - и может быть даже 27-ричное
Можно сделать чекбокс "Binary Coded Ternary" для того, чтобы посмотреть как оно будет выглядеть в двоичном виде, а также радио-кнопки 16-bit, 32-bit и 48-bit (64 наверное уже лишнее), чтобы только ограниченное количество старших битов заполнять единичками в случае отрицательных чисел.
P.S. С другой стороны 48 битов совсем левое число - надо делать стандартный набор - 16, 32 и 64 (в 64 бита должно влезать 40 тритов).
P.P.S. А по троичности наверное 36 тритов будет более чем достаточно (сверху старшие 18, снизу младшие 18):
Attachments:
Screenshot from 2023-04-27 22-12-25.png [ 12.96 KiB | Viewed 4008 times ]
Оно не "по феншую" - нету NOP и девятеричная система не как в Тунгуске
Когда ничего нету, пожалуй, и Оно не "по феншую" - сойдёт... крайне мало такого софта онлайн...
Ну значит сделаем такого софта больше
Вот это правильно! Я тоже свой конвертер под JS перепишу позже, когда время будет... И практика показала - ещё бы неплохо сразу 4 математических операции вделать в эти программы.
_________________ iLavr
29 Apr 2023 02:09
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22619 Location: Silicon Valley
Ну я пока думаю иметь +1 -1 *3 и /3, а также универсальная унарная операция будет, которая задаётся тремя триадами (NOP=тоже самое, PON=инверсия и т.д.)
Screenshot from 2023-04-30 11-33-59.png [ 73.51 KiB | Viewed 3841 times ]
Под спойлером HTML часть нового веб-приложения Balanced Ternary Converter (как на картинке выше - оно меняться уже не будет, ну разве что байткод робота прямо туда же зафигачу, когда закончу)
Users browsing this forum: No registered users and 34 guests
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum