为什么计算机使用二进制而不是三进制?

89

一个三态对象难道不是能够立即存储更多信息和处理更大的值吗?我知道处理器目前使用大量的异或门网络,这需要重新设计。

既然我们已经发展到了64位(可以表示2^63种可能状态),计算等效的三进制 代数将支持具有比log(3^63-2^63)高30个十位数的数字。

我想象检测+1和0之间的电势差别应该与检测-1和0之间的电势差别一样容易。

硬件的某些复杂性、功耗或芯片密度会抵消存储和计算能力的任何收益吗?


1
64位 -> 2^64,64个三进制数字(trits)-> 3^64,而不是63。 - Oskar Skog
15个回答

69
  • 构建使用超过两种状态/级别/其他的组件要困难得多。例如,逻辑中使用的晶体管要么关闭并且根本不导通,要么完全放开。将其设置为半开状态需要更高的精度并使用额外的功率。尽管如此,有时会使用更多的状态来打包更多数据,但很少这样做(例如,现代NAND闪存,调制解调器中的调制)。

  • 如果您使用超过两种状态,则需要与二进制兼容,因为其他地方都在使用它。三个状态不行,因为将其转换为二进制将需要昂贵的乘法或余数除法。相反,您可以直接转到4或更高次幂。

这些是实际原因,说明为什么不这样做,但从数学上讲,基于三元逻辑构建计算机是完全可行的。


11
我们讨论的并不是现代时代。当三进制计算机被考虑时,世界其他地方仍在使用二进制计算机(也在使用)。 - paweloque
1
是的,现代硬件可能会成为一个问题,但这也是为什么需要新硬件的原因,是的,一开始它可能会很昂贵,但就像当前硬件价格随时间降低一样。作为另一个深度参与此话题的人,我认为没有不好的理由。 - ars265
3
如果一个bit是二进制数据的一部分,那么一个三进制数据的一部分会是什么呢? - aaron-bond
5
确定是被称为“trit”。 - Riking
1
“expensive”?听起来像你在微观优化。 - Quip Yowert
显示剩余2条评论

47
这里有很多错误信息。二进制只有一个简单的开/关开关。三元/三进制可以使用两种模式之一:平衡(-1、0、+1)或不平衡(0、1、2),但不是只有开和关,更准确地说,它有两个“开”状态。
随着光纤和硬件的扩展,三进制实际上会带我们进入一个更加广阔和更快的状态,成本更低。现代编码仍然可以使用(就像32位软件仍然能够在64位硬件上使用)与新的三进制代码组合使用,至少最初可以这样。只需要早期硬件来检查通过的哪个信息片段,或者软件提前宣布它是位还是三位。相同或更少的功率可以同时发送3个代码片段,而不是现代的2个。
对于光纤硬件,它不再采用现代的开/关二进制过程,而是由0=关以及另外2个开关作为光的正交偏振决定。至于安全性,这实际上可以为个人提供更大的安全性,因为每台PC甚至每个用户都设置了一个特定的极化“规格”,仅在用户和目标之间发送/接收。对于其他硬件的“门”也是如此。它们不需要更大,只需要有3个选项而不是2个选项。
甚至已经有一些关于约瑟夫森效应的理论,甚至可能开始一些测试,这将允许使用循环超导电流的三进制存储单元,顺时针、逆时针或关闭。

与其他进制相比,三进制是最高基数经济性的整数进制,紧随其后的是二进制和四进制。甚至一些现代系统使用一种三进制逻辑(也被称为SQL),将其实现为处理数据库中的NULL字段内容的一种方式。SQL使用NULL来表示缺失的数据。如果一个字段没有定义值,SQL假定这意味着实际值存在,但该值当前未记录在数据库中。请注意,缺失值与数字零或长度为零的字符串值都不同。即使将任何东西与NULL进行比较,甚至是另一个NULL,结果也会产生未知的真值状态。例如,对于具有“芝加哥”城市字段的记录,“City = 'Paris'” SQL表达式解析为FALSE,但对于具有空白城市字段的记录,则解析为UNKNOWN。换句话说,对于SQL来说,未定义的字段表示可能的任何可能值:缺失的城市可能代表巴黎,也可能不代表。这就是现代二进制系统中使用三进制逻辑的地方,尽管是粗略的。


1
这是一个晚回复,可能对任何人都没有好处,但我认为你将二进制/三进制转换的比较类比于32位/64位转换是谬误的。在后一种情况下,硬件的基本功能并没有真正改变;指令mov eax,ebx在任何指令集中都会执行完全相同的操作。但是,在三进制/二进制区别中,这不再是一个合理的保证:三进制寄存器可能与二进制寄存器看起来非常不同;mov eax ebx可能对两种编码的含义不同。 - bionicOnion
1
@bionicOnion:我认为向后兼容没有问题。二进制代码89 d8在0/1位中保持不变,但在三进制中,您可以获得更多的操作码,其中任何一个16个三进制数中的一个可以是-1。而这些不是相同的操作码。 - Jongware
内存速度方面是什么? - Zeshan Sajid
三进制是具有最高基数经济性的整数进位制,紧随其后的是二进制和四进制。但由于介质阻抗不匹配,所有存储在二进制介质上的三进制数据都会发生基数损失,因此这个问题没有意义。除非整个系统都是三进制,否则没有任何收益,只有净损失。 - The Coordinator
2
最后,关于数字基数经济存在于光纤上的想法是错误的。光纤硬件也不受相同的“基数经济”影响,因为数字信号受到多级复用的影响,包括但不限于波分复用。 - The Coordinator
显示剩余2条评论

18

当然,每个比特能够存储更多的数据,就像我们的十进制数字系统可以在一个数字中存储更多的数据一样。

但这也增加了复杂性。二进制在许多情况下表现得非常好,使得操作变得非常简单。而对于三进制数字(或者说十进制数字),二进制加法器的逻辑要简单得多。

你不能神奇地存储或处理更多的信息。硬件必须更加庞大和复杂,以抵消更大的容量带来的优势。


8
这是基于实际设计硬件的经验还是仅凭直觉? - ojblass
9
20世纪40年代起,人们开始制造十进制计算机,这是三进制逻辑门的来源之一。虽然也存在三进制逻辑门,但三进制计算机却很少见。您可以参考维基百科有关计算机硬件历史、三进制逻辑以及三进制计算机的文章来了解更多信息。 - Doug
2
根据定义,三进制的逻辑比二进制更复杂。在二进制中,如果您有两个位输入,则有2 * 2 == 4个输出。而在三进制中,您有3 * 3 + 9个输出。 - James
2
@IsaacKotlicky 噪声免疫性与以往一样重要。只要您以某种方式使用电压级别,它们之间的余量直接转化为时间和能量。 - Potatoswatter
3
三进制可以很好地基于电信号。约瑟夫森结记忆电路使用定向电流来确定值,所以顺时针为1,逆时针为-1,关闭为0(显然)。这比简单的进位三进制有进一步的优势。 - Isaac Kotlicky
显示剩余16条评论

13

很大程度上,这是因为在电子设备中,比特最终是由电脉冲表示的。因此,构建一个只需区分“有电荷”和“无电荷”,并能够轻松检测状态转移的硬件会更加容易。而采用三种状态的系统则需要更加精确地区分“有电荷”、“部分电荷”和“无电荷”。此外,在电子设备中,“有电荷”状态并不是恒定的:能量最终会开始“流失”,因此“有电荷”状态实际上的“能量水平”是变化的。在三态系统中,这也必须被考虑到。


其实,我认为大部分三态逻辑使用+1、0和-1状态,而不是0、+0.5和+1.0状态。 - Rick Copeland
无论“most”是什么意思...但我想检测+1和0之间的差异与-1和0之间的差异一样容易。 - ojblass
6
尝试编写只使用一个if语句来区分三个值的代码。(不允许使用switch/case) - SingleNegationElimination
3
我能创造一种语言结构吗? - ojblass
2
@IfLoop 您是在指 Fortran 的算术 If 吗? - Navin

9
也有理论认为,光纤可以使用不同的光频(即颜色)来区分状态,从而允许近乎无限(取决于检测单元的分辨率)数量的基本可能性。
对于任何基数,逻辑门都是可行的,但让我们以三进制为例:
对于三进制异或门,它可以独占比较的三个状态中的一个(或任何一个),或者独占另外三个状态中的一个。它还可以将三个状态中的两个状态绑定在一起以获得二进制输出。可能性呈指数级增长。当然,这将需要更复杂的硬件和软件,但复杂度应该会减小尺寸,更重要的是降低功耗(读取热量)。甚至有人谈论在纳米计算系统中使用三进制,其中微观的“凸起”,“洞”或“未改变”的状态代表三种状态之一。
现在,我们面临着一种类似QWERTY的问题。 QWERTY的设计是低效的,因为存在打字机械问题,但今天使用键盘的每个人都学会了使用qwerty系统,没有人想改变它。当我们达到二进制计算的物理极限时,三进制及更高进制将有一天突破这个问题。也许不是在未来二十年内,但我们都知道,我们不能永远每年增加一倍的能力。

现如今,有了表情符号,我们似乎有了一种 QWERTY+,这在自然语言交流中十分流行。虽然之前这似乎有些奇怪,但现在使用它能够节约打字时间、扩展上下文内容或者同时实现两者。 - yulian

7

首先,没有比位更小的信息单位。在位级别上处理信息是最基本和最基础的方法。

其次一个更加重要的原因是,制造具有两种稳定状态的电子元件比制造具有三种稳定状态的元件容易得多。

另外,您的数学有点错误。64位三进制数字中大约有101.4个二进制数字。解释:最大的64位三进制数是3433683820292512484657849089280(3^64-1)。要用二进制表示它所需要的是102个位:101011010101101101010010101111100011110111100100110010001001111000110001111001011111101011110100000000

这很容易理解,log2(3^64)约为101.4376


2的6次方是64,3的6次方是729...对不起,我是不是太迟钝了? - ojblass
你当然是对的...我的头很疼,但你是对的...你能以某种有意义的方式纠正问题吗? - ojblass
2
关于“制造具有两个稳定状态的电子元件比三个更容易”,在未来现代化的情况下是否可能会改变? - Pacerier
1
@Pacerier:就我所知,没有这样的东西,但我不是专家。这可能是一个问题,可以在http://physics.stackexchange.com/上提问。 - SingleNegationElimination

3
Screwball的回答是正确的,并纠正了这里提出的一些错误陈述。那些关于分数正值的回答完全忽略了三进制系统的概念,该系统基于0、+1和-1。当俄罗斯人在1950年代首次构建它时,苏联和美国之间的竞争非常激烈。我怀疑两国政治之间的关系对美国的二进制最终流行背后起到了很大的作用。
据我所读,目前有一些三进制计算机正在使用中。莫斯科的一所大学使用了一些,IBM实验室也有一些。还有其他的参考文献,但我无法区分它们有多严肃,或者它们只是用于实验或娱乐。显然,它们的成本要低得多,并且使用的能源要少得多。

1
我找不到任何关于计算机“正在使用”的参考资料。它们都在博物馆里或成为大学的古老玩具。没有一台是在过去40年内建造的。 - Mooing Duck
@MooingDuck,是时候改变它了!让三元运算符再次伟大起来! - yulian

3
我认为有两个原因(如有错误请纠正):首先,因为0和1的值并不是真正的无电流/有电流或类似的东西。噪声相当高,电子元件必须能够区分一个值从0.0到0.4波动是零,而从0.7到1.2是一。如果你增加更多的级别,基本上就会使这种区分更加困难。
其次:所有布尔逻辑将立即失去意义。由于你可以通过布尔门实现求和,并从求和中得出任何其他数学运算,所以最好拥有一个可以很好地映射到数学实际应用的东西。对于false/maybe/true之间的任意一对,布尔真值表会是什么样子呢?

13
其实布尔真值表只是特殊情况,针对数值为2的情况而言。你同样可以很容易地定义三元逻辑。为了让它更有趣,高阻态Z实际上被用于每个标准计算机/电子设备中,以实现能够处理多个设备的总线。详情请参见http://en.wikipedia.org/wiki/Ternary_logic。 - viraptor
我不同意维基百科关于 Z 是逻辑状态的说法。在现实世界中,并不是所有操作都可以使用 Z。如果要构建一个能够与 Z 一起工作的异或门,应该如何做呢? - MadCoder
你可以在所有的逻辑门中绝对使用Z。二进制有16个理论上的双输入门,其中一个被命名为XOR。三进制有19,683个理论上的双输入门,其中243个产生与0/1输入的XOR相同的结果。随便选吧。 - Mooing Duck

1
另一个主要障碍是需要定义更多的逻辑操作。运算符的数量由公式b^(b^i)确定,其中b是基数,i是输入数量。对于两个输入的二进制系统,这意味着有16个可能的运算符。并非所有的运算符都通常在门电路中实现,有些门电路涵盖了多个条件,但所有这些运算符都可以用三个或更少的标准门电路来实现。对于两个输入的三进制系统,这个数字要高得多,约为19683。虽然其中几个门电路会相似,但最终手动设计基本电路的能力几乎是不可能的。即使是一名大一工程学生也能够在脑海中设计基本的二进制电路。

请解释为什么运算符的数量是b^(b^i)。 - enrique
设计基本电路在三进制中并不比二进制更难。理论上,三进制有19,683个两输入门,但实际上,我预计你只需要其中约9个来制作功能电路。二进制理论上有16个,但大多数情况下我们只使用约4个。 - Mooing Duck

1
如果我们使用三种状态,那么由此产生的主要问题是:
  1. 如果使用单极性信号,则噪声裕度将减小,从而增加位误差率。
  2. 为了使单极性信号保持噪声裕度不变,我们必须增加电源供应,因此功耗将增加。
  3. 如果使用双极性信号,则信号的总摆幅将增加,从而增加损耗。
  4. 多层PCB中必须添加额外的层,以考虑双极性信号中的负摆。
希望我说服你了。

值得注意的是,三元运算符需要的门/单元等较少,但并不足以弥补每条迹线的功率增加。 - Mooing Duck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接