平衡三进位

平衡三进制（）是一种非标准的计数进位制，它是一种基数为formula_1的进位制系统，其中用于计数的符码为formula_2，与标准基数 3 进制系统对比：其中的计数符号为formula_3。以平衡三进制所记录的数字可以表达出全部整数，由于formula_4的引入，而且对负数不必使用额外的负号；应用在于解决秤重问题，或在一些早期的计算机中使用。
有些地方使用不同符码来表示平衡三进制中的三个数符。本文中以 T（连在 1 上方的负号）表示 formula_4，而 formula_6和 formula_7表示自身。其他约定包括使用 '-' 和 '+'分别表示 formula_4和 formula_7，。在 "Setun"计算机中 formula_4表示为倒转的阿拉伯数字一：「」。
平衡三进制在 Michael Stifel（1544）的书《Arithmetica Integra》中出现过。它也曾出现在 Kepler和 LéonLalanne 的作品中。对负数不必使用额外的负号这一点，使得平衡三进制在四则运算的加、减、乘法效率，会比二进制高。美国著名计算机学家高德纳在《编程的艺术》一书中指出，“也许最美的进制是平衡三进制”。
数的表示方法.
整数的转换.
平衡三进制和其他进制一样，各位的数字和位权相乘然后叠加起来，就是该数的数值。数字下标 bal3 表示为平衡三进制，而下标 dec 则为十进制：
平衡三进制不需要额外的符号就可以表示负数。左起第一位若非 0 而是 T 的即为负数，若是 1 的则是正数。
在平衡三进制中，各位上的数字之和为偶数的整数是偶数；各位上的数字之和为奇数的整数是奇数。
比如：
小数.
平衡三进制和十进制一样，用小数点分隔整数部分和小数部分。
在平衡三进制中，四舍五入和截位的操作是等效的。
分数的小数化.
平衡三进制可以像十进制一样，可以用小数来表示分数，例如⅓=0.1bal3。
与十进制、二进制类似，部分分数有两种表达形式。在十进制、二进制中，最小的数码是0，因此小数点后最右边无限循环的0可以省略掉，从而变成一个整数或有限小数；而在平衡三进制中，小数点后最右边无限循环的T不能省略，因而不能变成整数或有限小数。
无理数.
无论对于十进制、平衡三进制还是其他以有理数为底数的记数系统，所有的无理数都只能表示成无限不循环小数。下表列出了一些代数无理数和超越无理数的十进制与平衡三进制的表示。
下面是另一个重要常数欧拉-马斯刻若尼常数在十进制与平衡三进制中的表示（现在仍无法确定其是有理数还是无理数）：
十进制到平衡三进制的转换.
十进制转化为平衡三进制，可参照下述方法，先圆整后，再分别对整数部分和小数部分进行连除法和连乘法即可。
-25.4
 -25.4,圆整#为-25; ‡ 余,-0.4;♦
 -25÷3=-8⅓, 圆整为- 8;余,-1↑; ‡ -0.4×3=-1.2, 圆整为-1|;余,-0.2;
 - 8÷3=-2⅔, 圆整为- 3;余, 1|; ‡ -0.2×3=-0.6, 圆整为-1 (原为0,底下进T,则为T)|;余, -0.6;
 - 3÷3=-1 , 圆整为- 1;余, 0|; ‡ -0.6×3= -1.8, 圆整为1 (原为-1,底下进T,为-2再改为1,再向上进T)|;余, -0.8;
 - 1÷3=- ⅓, 圆整为 0;余,-1|; ‡ -0.8×3= -2.4, 圆整为1 (原为-2,-2改为1,向上进T)↓;余,-0.4;跳入循环
 -25.410=T01T.TT113
当然，也可以采用另一种方法。
 -25.410=-(1T*1011+1TT*1010+11*101T)
 =-(1T*101+1TT+11/101)
 =-10T1.11TT
 =T01T.TT11
三进制计算机中数的表示.
计算机的初期发展过程中，苏联有一些实验性质的计算机，是以平衡三进制而不是二进制来设计制造的，其中最著名的是由尼古拉·布鲁金索夫和谢尔盖·索博列夫建造的 Сетунь。 与现在通行的二进制相比，平衡三进制的实验性设计具有许多计算科学上的优势。 特别是，正负一致性可以加快多位乘法中的进位速率，而舍入截断当量则会减少对分数做舍入的进位次数。 在平衡三进制中，单一位数的乘法表不需用到进位，而加法表只会有两个对称进位而不是三个。
注：以下部分以“'”为十进制数万位分隔符
基本概念.
位（trit）：对称三进制的数位；
字节（tryte）：莫斯科大学的Сетунь以6位为1个字节，单字节整数的表示范围为：-364~+364；
字（word）：参照二进制，以2个字节为1个字，单字整数的表示范围为：-26'5720~+26'5720;
整数.
纽约州立大学在1973年开发的测试机Ternac，采用24位表示一个整数，表示范围为-1412'1476'8240~+1412'1476'8240
定点数.
定点数的表示方法和整数一样。只是会预先指定小数点的位置。
比如采用48位表示一个实数，整数部分、小数部分各24位。则，表示范围为-1412'1476'8240.5~+1412'1476'8240.5，精度为3-24（3.54*10-12）
浮点数.
Ternac，采用48位表示一个实数，其中尾数42位，指数6位。
参照IEEE754的浮点数表示法，对称三进制的表示法如下：
1个符号位（整数部分）+尾数域41位（小数部分）+指数域6位
整数部分为1是正的规约数。表示范围为0.5*3-364+0.5*3-405~0.5*3365-0.5*3323
整数部分为0的是零附近的数，是非规约数。非规约数的指数固定为-364，指数域并入尾数。表示范围为0.5*3-411-0.5*3-364~0.5*3-364-0.5*3-411，精度为0.5*3-411。
逻辑常量.
三进制计算机，以三值逻辑为基础，有三个逻辑状态值——真、假、未知。我们用 formula_7 表示真、formula_6 表示未知，而 formula_13 则表示假。
三进制计算机中信息的表示.
三进制计算机中，以平衡三进制为信息进行编码。
我们可以以12位为单位，对文字进行编码作为标准信息交换码（STUCII，Standard Ternary Unified Code for Information Interchange）。其容量为53'1441个字符，约是16bits容量的8.1倍。
运算.
加减乘除四则运算.
平衡三进制和二进制一样，乘法运算等效于移位叠加运算。
单双位平衡三进制加法表、乘法表、除法表.
1从上表中可以看出，双位数相加可能会变成单位数，双位数相减可能会变成三位数，双位数相乘可能可能仍是双位数。这种情况在十进制和二进制中不会发生。
多位数的加减法.
就是逐位做加减法。
减法，亦可以逐位取反后，换做加法
比如
 1TT1TT.1TT1 1TT1TT.1TT1 1TT1TT.1TT1 1TT1TT.1TT1
 + 11T1.T - 11T1.T - 11T1.T -&gt; + TT1T.1
 1T0T10.0TT1 1T1001.TTT1 1T1001.TTT1
 + 1T + T T1 + T T1
 1T1110.0TT1 1110TT.TTT1 1110TT.TTT1
 + T + T 1 + T 1
 1T0110.0TT1 01100T.TTT1 01100T.TTT1
乘法.
可以采用类似于十进制的各种方法。
比如
 1TT1.TT
 × T11T.1
 1TT.1TT
 T11T.11
 1TT1T.T
 1TT1TT
 +T11T11
 0T0000T.10T
除法.
平衡三进制的除法和十进制的除法类似。
但是，大家已经知道，0.5在平衡三进制中有0.11111...和1.TTTT...两种表达式，也就是说，如果被除数超过除数的一半，商的当前位就要置1或T。
 1TT1.TT
 T11T.1 ) T0000T.10T 
 T11T1
 1T1T0
 1TT1T
 111T
 1TT1T
 T00.1
 T11T.1
 1T1.00
 1TT.1T
 1T.T1T
 1T.T1T
 0
当然，有着更简单的除法，它直接按规则运算，无需要对比余数大小，此方法源于Donald Knuth的试商法，但此方法并不完善，后经其他学者改进，完全摒弃了半封闭区间的判断，改而用每轮除法余数最高位是否为0的条件，来判断这一轮除法是否结束，并命名为二重试商法：核心逻辑是将被除数拆分为两个向量（p和s)，其中 p 的位数最多与除数 q 相同，s 则是剩余位数的向量；然后根据规则（双正或双负得正商，一正一负得负商，其它为0）上商，每轮除法至多一次或两次相减，若相减一次后，余数 p 最高位仍不为0，则需再相减一次，得余数 p 最高位为0本轮除法结束，该位是二重商取双倍值，并把结果给到寄存器 r；然后余数 p 左移一位，丢弃上一轮除数的最高位（已为0），拉取一位 s 进行补充，得到新余数 p 转入下一轮，结果 r (3倍放大)右移一位补0，则当s 用尽时，结果 r 和被除数 p 构成最终的商和余数。
 ++0- ++ 
 +0- )+0++0+ +- )+0+ 
 -0+ -+
 0+-+ 0++
 -0+ -+
 00-0 +-
 000 -+ 
 -0+ 0
 +0-
 --------- +0与+-相加，商得+--
 0
开平方.
平衡三进制开平方和十进制、二进制类似。但和除法一样，要比较的是半除数。例如：
 1. 1 1 T 1 T T 0 0 ...
 √1T 1&lt;1T&lt;11, 置 1
 1
 10 1.0T 1.0T&gt;0.10, 置 1
 1T0 1.T0
 110 1T0T 1T0T&gt;110, 置 1
 10T0 10T0
 1110 T1T0T T1T0T&lt;TTT0, 置 T
 100T0 T0010
 111T0 1TTT0T 1TTT0T&gt;111T0, 置 1
 10T110 10T110
 111T10 TT1TT0T TT1TT0T&lt;TTT1T0, 置 T
 100TTT0 T001110
 111T1T0 T001TT0T T001TT0T&lt;TTT1T10, 置 T
 10T11110 T01TTTT0
 111T1TT0 T001T0T TTT1T110&lt;T001T0T&lt;111T1TT0, 置 0
 T
 111T1TT00 T001T000T TTT1T1100&lt;T001T000T&lt;111T1TT00, 置 0
 T
 111T1TT000 T001T00000T
逻辑运算.
平衡三进制逻辑门，在运算中起着至关重要的作用，使用非门从数值上，可正数变负数，负数也可变为正数；从逻辑上，假命题变成真命题，真命题变成假命题，两者则保持不变；基于此特性，减法可转成加其相反数，乘除法又是加减法的扩展，一切运算皆是加法运算，而对其逻辑门输入或输出取反操作符合德摩根定律，以下四种基础门均可用非门任意转换，以下是平衡三进制逻辑运算真值表。