Троичный конвертер онлайн

Уравновешенная троичная система счисления - форум переехал с http://ternary.info

Moderator: haqreu

Ivanches
Junior
Posts: 3
Joined: 20 Mar 2023 20:49
Location: Москва

Троичный калькулятор на HTML/JS

Post by Ivanches »

Вчера попал на этот чудный форум! Прочитав статью на хабре администратора. Зачитался тут темами, что не заметил, как и утро наступило :lol:
Спасибо за толковый и полезный контент! Но помимо благодарностей хотел бы и свои "пять копеек" внести.
По поводу конвертации систем счисления из одной в другие и т.д. В случае с троичной системой не нужно 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. Полезно бывает когда на ряд светодиодов смотришь считать :rotate:
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный калькулятор на HTML/JS

Post by Shaos »

А где-то есть реальный сайт, где этот код крутится?

P.S. Сначала перенёс вышестоящее сообщение в отдельный топик, а потом решил вернуть сюда (раз уж мы от джавы плавно перешли к абстрактному "онлайн")...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный конвертер онлайн

Post by Shaos »

Пришло время переписать мой конвертер с джавы на что-то более дружелюбное для современных браузеров - в частности как я недавно показал писать можно прямо на языке Robby (чтобы в случае чего можно было легко портануть такое онлайн-приложение на поддерживаемые nedoPC SDK ретро-компьютеры) и оно будет запускаться в браузере с помощью моего фреймворка Rgrid,js. Заодно можно кое-что из конвертера Лавра реализовать ;)

Основой джавовской версии конвертера являются вот эти 2 функции, переводящие число в троичное представление и обратно:

Code: Select all

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") - явное задание двоичной разрядности нужно для того, чтобы корректно отображать отрицательные числа (все старшие биты у которых будут заполнены единичками).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный конвертер онлайн

Post by Shaos »

По интерфейсу - делаем как и было:
- троичное представление (NOP),
- десятичное (0...9),
- шестнадцатиричное (0...F),
- двоичное (0,1),
а также до кучи:
- восьмиричное (0...7),
- девятиричное (DCBA01234 как в Тунгуске),
- и может быть даже 27-ричное :o

Можно сделать чекбокс "Binary Coded Ternary" для того, чтобы посмотреть как оно будет выглядеть в двоичном виде, а также радио-кнопки 16-bit, 32-bit и 48-bit (64 наверное уже лишнее), чтобы только ограниченное количество старших битов заполнять единичками в случае отрицательных чисел.

P.S. С другой стороны 48 битов совсем левое число - надо делать стандартный набор - 16, 32 и 64 (в 64 бита должно влезать 40 тритов).

P.P.S. А по троичности наверное 36 тритов будет более чем достаточно (сверху старшие 18, снизу младшие 18):
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный конвертер онлайн

Post by Shaos »

Кликать на лампочки тоже можно будет :)

You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный конвертер онлайн

Post by Shaos »

Вот как-то так оно будет выглядеть:
Screenshot from 2023-04-28 01-43-32.png
(сразу под троичными представлениями будет написано десятичное число как есть, а то что внизу будет построено из бинарного представления в случае BCT)
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Троичный конвертер онлайн

Post by Lavr »

Есть вот такая простенькая штука онлайн на js: Калькулятор
Калк.PNG
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный конвертер онлайн

Post by Shaos »

Оно не "по феншую" - нету NOP и девятеричная система не как в Тунгуске :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Троичный конвертер онлайн

Post by Lavr »

Shaos wrote:Оно не "по феншую" - нету NOP и девятеричная система не как в Тунгуске :roll:
Когда ничего нету, пожалуй, и Оно не "по феншую" - сойдёт... крайне мало такого софта онлайн... :-?
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный конвертер онлайн

Post by Shaos »

Lavr wrote:
Shaos wrote:Оно не "по феншую" - нету NOP и девятеричная система не как в Тунгуске :roll:
Когда ничего нету, пожалуй, и Оно не "по феншую" - сойдёт... крайне мало такого софта онлайн... :-?
Ну значит сделаем такого софта больше :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Троичный конвертер онлайн

Post by Lavr »

Shaos wrote:
Lavr wrote:
Shaos wrote:Оно не "по феншую" - нету NOP и девятеричная система не как в Тунгуске :roll:
Когда ничего нету, пожалуй, и Оно не "по феншую" - сойдёт... крайне мало такого софта онлайн... :-?
Ну значит сделаем такого софта больше :)
Вот это правильно! :kruto: Я тоже свой конвертер под JS перепишу позже, когда время будет...
И практика показала - ещё бы неплохо сразу 4 математических операции вделать в эти программы.
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный конвертер онлайн

Post by Shaos »

Ну я пока думаю иметь +1 -1 *3 и /3, а также универсальная унарная операция будет, которая задаётся тремя триадами (NOP=тоже самое, PON=инверсия и т.д.)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Троичный конвертер онлайн

Post by Lavr »

Есть очень интересный калькулятор онлайн - считает и показывает процесс, как считал:
Сложение, умножение и деление чисел в различных системах счисления

В троичной системе 0,1,2 - тоже умеет, а вот в троичной симметричной системе - нет... :-?
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный конвертер онлайн

Post by Shaos »

Screenshot from 2023-04-30 11-33-59.png
Под спойлером HTML часть нового веб-приложения Balanced Ternary Converter (как на картинке выше - оно меняться уже не будет, ну разве что байткод робота прямо туда же зафигачу, когда закончу)

 HTML

Code: Select all

<HTML>
<HEAD><TITLE>Ternary Converter</TITLE>
<META HTTP-EQUIV="Content-Language" content="en">
<META HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
<SCRIPT type="text/javascript" src="Rgrid.js"></SCRIPT>
<SCRIPT type="text/javascript" src="robot1.js"></SCRIPT>
</HEAD>
<BODY BGCOLOR=#FFFFFF TEXT=#000000 LINK=#000080>
<center><h1>Balanced Ternary Converter</h1></center>
<p id="here" align=center>Rgrid requires a modern web-browser to work properly...</p>
<p align=center>
<table>
<tr>
<td width=400><font color=#0000AA>Balanced Ternary (N,O,P)</font></td>
<td width=400 align=right><input type=text id=input3 size=36 onchange="$R.event(0,-303,$_('input3'))"></td>
</tr>
<tr>
<td width=400><font color=#0000AA>Balanced Nonary (D,C,B,A,0,1,2,3,4)</font></td>
<td width=400 align=right><input type=text id=input9 size=36 onchange="$R.event(0,-309,$_('input9'))"></td>
</tr>
<tr>
<td width=400><font color=#0000AA>Balanced Septemvigesimal (N-Z,0-9,A-D)</font></td>
<td width=400 align=right><input type=text id=input27 size=36 onchange="$R.event(0,-327,$_('input27'))"></td>
</tr>
<tr>
<td width=400><p id="output">0</p></td>
<td width=400 align=right>
<input type=checkbox id=inputbct onchange="$R.event(0,-400,$_('inputbct'))"> BCT*
<input type=radio name=limit id=radio16 checked onchange="$R.event(0,-116,$_('radio16'))"> 16-bit
<input type=radio name=limit id=radio32 onchange="$R.event(0,-132,$_('radio32'))"> 32-bit
<input type=radio name=limit id=radio64 onchange="$R.event(0,-164,$_('radio64'))"> 64-bit
</td>
</tr>
<tr>
<td width=400>Binary (0,1)</td>
<td width=400 align=right><input type=text id=input2 size=36 onchange="$R.event(0,-202,$_('input2'))"></td>
</tr>
<tr>
<td width=400>Octal (0,1,2,3,4,5,6,7)</td>
<td width=400 align=right><input type=text id=input8 size=36 onchange="$R.event(0,-208,$_('input8'))"></td>
</tr>
<tr>
<td width=400>Hexadecimal (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)</td>
<td width=400 align=right><input type=text id=input16 size=36 onchange="$R.event(0,-216,$_('input16'))"></td>
</tr>
<tr>
<td width=400>Decimal (0,1,2,3,4,5,6,7,8,9) with sign</td>
<td width=400 align=right><input type=text id=input10 size=36 onchange="$R.event(0,-210,$_('input10'))"></td>
</tr>
<tr>
<td colspan=2 align=center>
<input type=button value="inc" onclick="$R.event(0,-300,1)">
<input type=button value="dec" onclick="$R.event(0,-300,2)">
<input type=button value="mul 3" onclick="$R.event(0,-300,3)">
<input type=button value="div 3" onclick="$R.event(0,-300,4)">
<input type=button value="Any Op =>" onclick="$R.event(0,-300,5)">
<select name="one" id="op1" onchange="$R.event(0,-331,$_('op1'))">
<option value="N" selected>N</option>
<option value="O">O</option>
<option value="P">P</option>
</select>
<select name="two" id="op2" onchange="$R.event(0,-332,$_('op2'))">
<option value="N">N</option>
<option value="O" selected>O</option>
<option value="P">P</option>
</select>
<select name="three" id="op3" onchange="$R.event(0,-333,$_('op3'))">
<option value="N">N</option>
<option value="O">O</option>
<option value="P" selected>P</option>
</select>
</td>
</tr>
</table>
<font size=-1>
* Binary Coded Ternary (BCT) represents every trit by 2 bits: N->10, O->00, P->01 (and 11 means ERROR)
</font>
</p>
<p id="pow" align=center>Powered...</p>

<font size=1 color=#808080>
<p id="after">
 <br>
</p>
</font>

</BODY>
<script type="text/javascript">

$R.prefix = "ternary/";

$_("pow","Powered by " + $R.powered());

function command1(r) {
 $append("after","Robot "+r.regs[9]+" : "+r.regs[0xA]+" "+r.regs[0xB]+" "+r.regs[0xC]+"<br>");
}

function command2(r) {
 var id = r.regs[0xA];
 var len = r.regs[0xB];
 var adr = r.regs[0xC];
 var str = "";
 var i,j;
 for(i=0;i<len;i++) {
    str += String.fromCharCode($R.read(r,adr++));
 }
 if(id>=0) {
   $_('output',str);
 }
 else {
   j = -id;
   if(id>-100) {
    j -= 100;
    $_("radio"+j,"1");
   }
   else if(id>-200) {
    j -= 200;
    $_("input"+j,str);
   }
   else // <= -300
   {
    j -= 300;
    $_("input"+j,str);
   }
 }
}

$R.callback(1,command1);
$R.callback(2,command2);

function action(x,y) {
 $R.event(0,-1,1,x,y);
}

if($R.grid('here',18,2,action)>0) {
 $map($$("rtab.*.*"),function(e){e.width=45;e.height=45;});
 $R.add(robot);
 $R.start();
}

</script>
</HTML>

Пишу Robby часть...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный конвертер онлайн

Post by Shaos »

Текущее состояние дел можно посмотреть вот по этому линку (прототип робота зафигачил прямо в HTML):

http://nedopc.org/ternary_converter.html

Принимаются фидбеки...
Я тут за главного - если что шлите мыло на me собака shaos точка net