平衡三进制(英语:balanced ternary)是一种非标准的的计数进位制,它是一种基数为计算机中 表示为倒转的阿拉伯数字一:“1”。
平衡三进制在 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.4; - 3÷3=-1 , 圆整为- 1;余, 0|; ‡ 0.4×3= 1.2, 圆整为 1|;余, 0.2; - 1÷3=- ⅓, 圆整为 0;余,-1|; ‡ 0.2×3= 0.6, 圆整为 1↓;余,-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。
三进制计算机,以三值逻辑为基础,有三个逻辑状态值——真、假、未知。我们用 表示真、 表示未知,而 则表示假。
三进制计算机中,以平衡三进制为信息进行编码。
我们可以以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 -> + TT1T.1 ------------ -------------- --------------- 1T0T10.0TT1 1T1001.TTT1 1T1001.TTT1 + 1T + 1 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
开平方
平衡三进制开平方和十进制、二进制类似。但和除法一样,要比较的是半除数。例如:
1. 1 1 T 1 T T 0 0 ... ------------------------ √1T 1<1T<11, 置 1 1 ----- 10 1.0T 1.0T>0.10, 置 1 1T0 1.T0 -------- 110 1T0T 1T0T>110, 置 1 10T0 10T0 -------- 1110 T1T0T T1T0T<TTT0, 置 T 100T0 T0010 --------- 111T0 1TTT0T 1TTT0T>111T0, 置 1 10T110 10T110 ---------- 111T10 TT1TT0T TT1TT0T<TTT1T0, 置 T 100TTT0 T001110 ----------- 111T1T0 T001TT0T T001TT0T<TTT1T10, 置 T 10T11110 T01TTTT0 ------------ 111T1TT0 T001T0T TTT1T110<T001T0T<111T1TT0, 置 0 T ----------- 111T1TT00 T001T000T TTT1T1100<T001T000T<111T1TT00, 置 0 T ------------- 111T1TT000 T001T00000T ...
逻辑运算
以下是平衡三进制逻辑运算真值表。