
平衡三进制
本条目需要补充更多来源。(2016年5月13日) |
平衡三进制,是一种以3为基数,-1(以下用T表示)、0、1为基本数码的进制。由于-1的引入,这种进制不需要额外的符号就能直接表示负数。正因为这一点,使得平衡三进制在加减法和乘法方面的效率要比二进制高。
美国著名计算机学家高德纳在《编程的艺术》一书中指出,“也许最美的进制是平衡三进制”。
“ | Perhaps the prettiest number system of all... is the balanced ternary notation | ” |
— Donald Knuth, The Art of Programming |
目录
数的表示方法[编辑]
整数[编辑]
平衡三进制和其他进制一样,各位的数字和位权相乘然后叠加起来,就是该数的数值。
平衡三进制不需要额外的符号就可以表示负数。第一个非0位是T的为负数,第一个非0位是1的是正数。
在平衡三进制中,各位上的数字之和为偶数的整数是偶数;各位上的数字之和为奇数的整数是奇数
比如:
十进制 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
平衡三进制 | TTT | TT0 | TT1 | T0T | T00 | T01 | T1T | T10 | T11 | TT | T0 | T1 | T | 0 | 1 | 1T | 10 | 11 | 1TT | 1T0 | 1T1 | 10T | 100 | 101 | 11T | 110 | 111 |
小数[编辑]
平衡三进制和十进制一样,用小数点分隔整数部分和小数部分。
十进制 | -0.9 | -0.8 | -0.7 | -0.6 | -0.5 | -0.4 | -0.3 | -0.2 | -0.1 | 0 | 0.1 | 0.2 | 0.3 | 0.4 | 0.5 | 0.6 | 0.7 | 0.8 | 0.9 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
平衡三进制 | T.010T | T.1TT1 | T.10T0 | T.11TT | 0.T或T.1 | 0.TT11 | 0.T010 | 0.T11T | 0.0T01 | 0 | 0.010T | 0.1TT1 | 0.10T0 | 0.11TT | 0.1或1.T | 1.TT11 | 1.T010 | 1.T11T | 1.0T01 |
在平衡三进制中,四舍五入和截位的操作是等效的。
分数的小数化[编辑]
平衡三进制可以像十进制一样,可以用小数来表示分数。例如⅓=0.13
十进制分数 | 1/1 | 1/2 | 1/3 | 1/4 | 1/5 | 1/6 | 1/7 | 1/8 | 1/9 | 1/10 | 1/11 | 1/12 | 1/13 | 1/14 | 1/15 | 1/16 | 1/17 | 1/18 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
平衡三进制小数 | 1 | 0.1或1.T | 0.1 | 0.1T | 0.1TT1 | 0.01或0.1T | 0.0110TT | 0.01 | 0.01 | 0.010T | 0.01T11 | 0.01T | 0.01T | 0.01T0T1 | 0.01TT1 | 0.01TT | 0.01TTT10T0T111T01 | 0.001或0.01T |
十进制分数 | 1/1 | 1/2 | 2/3 | 3/4 | 4/5 | 5/6 | 6/7 | 7/8 | 8/9 | 9/10 | 10/11 | 11/12 | 12/13 | 13/14 | 14/15 | 15/16 | 16/17 | 17/18 |
平衡三进制小数 | 1 | 0.1或1.T | 0.1 | 0.1T | 0.1TT1 | 1.0T或1.T1 | 1.0TT011 | 1.0T | 1.0T | 1.0T01 | 1.0T1TT | 1.0T1 | 1.0T1 | 1.0T101T | 1.0T11T | 1.0T11 | 1.0T111T0101TTT10T | 1.00T或1.0T1 |
与十进制、二进制类似,部分分数有两种表达形式。在十进制、二进制中,最小的数码是0,因此小数点后最右边无限循环的0可以省略掉,从而变成一个整数或有限小数;而在平衡三进制中,小数点后最右边无限循环的T不能省略,因而不能变成整数或有限小数。
无理数[编辑]
无论对于十进制、平衡三进制还是其他以有理数为底数的记数系统,所有的无理数都只能表示成无限不循环小数。下表列出了一些代数无理数和超越无理数的十进制与平衡三进制的表示。
代数数 | 十进制 | 平衡三进制 |
1.41421356237309... (≈ 1.414) | 1.11T1TT00T00T01T0T00T00T01T... | |
1.73205080756887... (≈ 1.732) | 1T.T1TT10T0000TT1100T0TTT011T... | |
2.2360679774997... (≈ 2.236) | 1T.1T0101010TTT1TT11010TTT01T... | |
φ(黄金分割,) | 1.6180339887498... (≈ 1.618) | 1T.T0TT01TT0T10TT11T0011T1001... |
超越无理数 | 十进制 | 平衡三进制 |
π(圆周率) | 3.1415926535897932384626433...(≈ 3.1416) | 10.011T111T000T011T1101T11111... |
e(自然对数的底) | 2.718281828459045... (≈ 2.718) | 10.T0111TT0T0T111T0111T000T11... |
下面是另一个重要常数欧拉-马歇罗尼常数在十进制与平衡三进制中的表示(现在仍无法确定其是有理数还是无理数):
数 | 十进制 | 平衡三进制 |
γ(欧拉-马歇罗尼常数) | 0.57721566490153... (≈ 0.577) | 1.TT1TT1T1010001T0T00111TTT0... |
十进制到平衡三进制的转换[编辑]
十进制转化为平衡三进制,可参照下述方法,先圆整后,再分别对整数部分和小数部分进行连除法和连乘法即可。
-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。
逻辑常量[编辑]
三进制计算机,以三值逻辑为基础,有三个逻辑常量——真、假、未知。我们用1表示真、0表示未知、T表示假
三进制计算机中信息的表示[编辑]
三进制计算机中,以平衡三进制为信息进行编码。
我们可以以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 ...
逻辑运算[编辑]
以下是平衡三进制逻辑运算真值表。
|
|
|
|
|
|
|
|
外部链接[编辑]
|