本页使用了标题或全文手工转换

平衡三进制

维基百科,自由的百科全书
跳转至: 导航搜索

平衡三进制,是一种以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.11.T 0.1 0.1T 0.1TT1 0.010.1T 0.0110TT 0.01 0.01 0.010T 0.01T11 0.01T 0.01T 0.01T0T1 0.01TT1 0.01TT 0.01TTT10T0T111T01 0.0010.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 1.T1.T 0.1 0.1T 0.1TT1 1.0T1.T1 1.0TT011 1.0T 1.0T 1.0T01 1.0T1TT 1.0T1 1.0T1 1.0T101T 1.0T11T 1.0T11 1.0T111T0101TTT10T 1.00T1.0T1

与十进制、二进制类似,部分分数有两种表达形式。在十进制、二进制中,最小的数码是0,因此小数点后最右边无限循环的0可以省略掉,从而变成一个整数或有限小数;而在平衡三进制中,小数点后最右边无限循环的T不能省略,因而不能变成整数或有限小数。

无理数[编辑]

无论对于十进制、平衡三进制还是其他以有理数为底数的记数系统,所有的无理数都只能表示成无限不循环小数。下表列出了一些代数无理数超越无理数的十进制与平衡三进制的表示。

代数数 十进制 平衡三进制
\sqrt{2} 1.41421356237309... (≈ 1.414) 1.11T1TT00T00T01T0T00T00T01T...
\sqrt{3} 1.73205080756887... (≈ 1.732) 1T.T1TT10T0000TT1100T0TTT011T...
\sqrt{5} 2.2360679774997... (≈ 2.236) 1T.1T0101010TTT1TT11010TTT01T...
φ(黄金分割, \tfrac{1+\sqrt{5}}{2} 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位。

参照IEEE745的浮点数表示法,对称三进制的表示法如下:

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倍。

运算[编辑]

加减乘除四则运算[编辑]

平衡三进制和二进制一样,乘法运算等效于移位叠加运算。

单双位平衡三进制加法表、乘法表、除法表[编辑]

加法
+ TT T0 T1 T 0 1 1T 10 11
11 0 1 1T 10 11 1TT 1T0 1T1 10T
10 T 0 1 1T 10 11 1TT 1T0
1T T1 T 0 1 1T 10 11
1 T0 T1 T 0 1 1T
0 TT T0 T1 T 0 1
T T11 TT T0 T1 T 0
T1 T10 T11 TT
T0 T1T T10
TT T01
乘法
× TT T0 T1 T 0 1 1T 10 11
11 T11T TT0 T01 TT 0 11 10T 110 1TT1
10 TT0 T00 T10 T0 0 10 1T0 100
1T T01 T10 TT 1 0 IT 11
1 TT T0 T1 T 0 1
0 0 0 0 0 0 0
T 11 10 1T 1 0 T
T1 10T 1T0 11
T0 110 100
TT 1TT1
减法
- TT T0 T1 T 0 1 1T 10 11
TT 0 T T1 T0 TT T11 T10 T1T T01
T0 1 0 T T1 T0 TT T11 T10 T1T
T1 1T 1 0 T T1 T0 TT T11 T10
T 10 1T 1 0 T T1 T0 TT T11
0 11 10 1T 1 0 T T1 T0 TT
1 1TT 11 10 1T 1 0 T T1 T0
1T 1T0 1TT 11 10 1T 1 0 T T1
10 1T1 1T0 1TT 11 10 1T 1 0 T
11 10T 1T1 1T0 1TT 11 10 1T 1 0
除法
÷ TT T0 T1 T 0 1 1T 10 11
TT 1 1.1 1T 11 -∞ TT T1 T.T T
T0 1.T1 1 1.1 10 -∞ T0 T.T T T.1T
T1 1.T 1.T 1 1T -∞ T1 T T.1 T.1
T 0.1T 0.1 0.1 1 -∞ T 0.T 0.T 0.T1
0 0 0 0 0 NaN 0 0 0 0
1 0.T1 0.T 0.T T +∞ 1 0.1 0.1 0.1T
1T T.1 T.1 T T1 +∞ 1T 1 1.T 1.T
10 T.1T T T.T T0 +∞ 10 1.1 1 1.T1
11 T T.T T1 TT +∞ 11 1T 1.1 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
                                              ...

逻辑运算[编辑]

以下是平衡三进制逻辑运算真值表。

逻辑与
T 0 1
T T T T
0 T 0 0
1 T 0 1
逻辑或
T 0 1
T T 0 1
0 0 0 1
1 1 1 1
逻辑与非
T 0 1
T 1 1 1
0 1 0 0
1 1 0 T
逻辑或非
T 0 1
T 1 0 T
0 0 0 T
1 T T T
逻辑异或
T 0 1
T T 0 1
0 0 0 0
1 1 0 T
逻辑合意
T 0 1
T T 0 0
0 0 0 0
1 0 0 1
逻辑调和
T 0 1
T T T 0
0 T 0 1
1 0 1 1
逻辑非
¬ T 0 1
1 0 T

外部链接[编辑]