为啥是二进制而不是三元计算? [关闭]

Posted

技术标签:

【中文标题】为啥是二进制而不是三元计算? [关闭]【英文标题】:Why binary and not ternary computing? [closed]为什么是二进制而不是三元计算? [关闭] 【发布时间】:2010-10-20 08:24:07 【问题描述】:

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

由于我们处于 64 位(我们可以表示 2^63 个可能的状态)计算等效的 ternary 代可以支持多 30 个十位 log(3^63-2^63) 的数字。

我想检测 +1 和 0 之间的电位差就像检测 -1 和 0 之间的电位差一样容易。

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

【问题讨论】:

64 bits -> 2^64, 64 trits -> 3^64, not 63 【参考方案1】:

这里有很多错误信息。二进制有一个简单的开/关开关。 Trinary/Ternary 可以使用 2 种模式之一:平衡,即 -1、0、+1 或不平衡 0、1、2,但不仅仅是开或关,或者更准确地说,有 2 个“开”状态。

随着光纤和扩展硬件的扩展,三元组实际上会以更低的成本将我们带到更扩展和更快的状态。现代编码仍然可以与更新的三进制代码结合使用(就像 32 位软件仍然能够在 64 位硬件上使用一样),至少在最初是这样。只需要早期的硬件来检查哪条信息通过,或者软件提前宣布它是否有点或琐碎。代码可以一次发送 3 段,而不是现代的 2 段,但功率相同或更低。

使用光纤硬件,而不是现代的开/关二进制过程,它将由 0=off 和其他 2 个开关作为光的正交偏振来确定。至于安全性,这实际上可以大大提高个人的安全性,因为每台 PC 甚至用户都设置为特定的极化“规格”,该极化“规格”只能在用户和目的地之间发送/接收。其他硬件的“门”也是如此。它们不需要更大,只需选择 3 种可能性而不是 2 种。

甚至有一些理论,甚至可能开始对约瑟夫森效应进行一些测试,这将允许使用循环超导电流(顺时针、逆时针或关闭)实现三元存储单元。

直接比较时,三进制是基数经济性最高的整数基数,其次是二进制和四进制。甚至一些现代系统也使用一种三元逻辑,也就是 SQL,它实现了三元逻辑作为处理 NULL 字段内容的一种手段。 SQL 使用 NULL 来表示数据库中缺失的数据。如果字段不包含定义的值,SQL 假定这意味着存在实际值,但该值当前未记录在数据库中。请注意,缺失值与零数值或零长度的字符串值不同。将任何内容与 NULL(甚至另一个 NULL)进行比较会导致 UNKNOWN 真实状态。例如,SQL 表达式“City = 'Paris'”对于 City 字段中包含“Chicago”的记录解析为 FALSE,但对于 City 字段为 NULL 的记录解析为 UNKNOWN。换句话说,对于 SQL,一个未定义的字段可能代表任何可能的值:一个缺失的城市可能代表也可能不代表巴黎。这就是现代二进制系统使用三进制逻辑的地方,尽管很粗糙。

【讨论】:

这是一个较晚的响应,可能不会对任何人有任何好处,但我认为您将二进制/三进制转换与 32 位/64 位转换进行比较是错误的。在后一种情况下,硬件功能在基本层面上并没有真正改变。指令mov eax, ebx 将在任一指令集中执行完全相同的操作。有了三进制/二进制的区别,这不再是一个合理的保证:三进制寄存器可能看起来与二进制寄存器有很大不同; mov eax ebx 可能对两种编码的含义不同。 @bionicOnion:我认为向后兼容性没有问题。 0/1 位中的二进制代码89 d8 在三元组中将保持不变,但是您会得到更多的操作码,其中这 16 个三元组中的任何一个都可以是-1。而那些不是相同的操作码。 内存速度方面是什么? @RadLexus 我假设他正在研究硬件方面,而不是软件方面。三进制处理器,或者至少是早期的处理器,可能具有不同的二进制和三进制模式,并且需要在它们之间切换。这会产生一些开销,即使它可能不多。此外,根据其设计方式,将数据移入三进制寄存器的过程可能与将数据移入二进制寄存器的过程大不相同。如果是这样,我们将失去mov eax, ebx 始终执行相同进程的保证。 最后,数字基数经济存在于光纤上的想法是错误的。光纤硬件也不受相同的“基数经济”的影响,因为数字信号受到多个级别的复用 - 包括但不限于波分复用。【参考方案2】:

如果我们使用 3 个状态,那么由此产生的主要问题是

    如果我们使用单极性信号,那么噪声容限会降低,从而增加误码率。 为了使单极信号保持噪声容限恒定,我们必须增加电源,因此功耗会增加。 如果我们使用双极信号,那么信号的总摆幅会增加,从而增加损耗。 必须在多层 PCB 中添加额外层以解决双极信号中的负摆幅。

希望我有说服力

【讨论】:

【参考方案3】:

构建使用两个以上状态/级别/其他的组件要困难得多。例如,逻辑中使用的晶体管要么是闭合的,根本不导电,要么是全开的。将它们半开需要更高的精度并使用额外的功率。尽管如此,有时更多的状态被用于打包更多的数据,但很少(例如现代 NAND 闪存、调制解调器中的调制)。

如果您使用两种以上的状态,则需要与二进制兼容,因为世界其他地方都在使用它。三是因为转换为二进制需要昂贵的乘法或除法余数。相反,您可以直接使用四或二的更高次方。

这些是未完成的实际原因,但从数学上讲,完全有可能在三元逻辑上构建计算机。

【讨论】:

我们这里不是在谈论现代。在考虑三元计算机时,世界其他地方仍在(也)在二进制计算机上工作 是的,现代硬件会是一个问题,但这就是为什么需要新硬件的原因,是的,一开始它会很贵,但很像当前的硬件价格随着时间的推移而下降。作为另一个深入参与该主题的人,我说没有充分的理由不这样做。 还有:如果一个位是一段二进制数据,那么一段三进制数据会是什么……? @Askan 很确定它被称为 trit。 “贵”??听起来你在进行微优化。【参考方案4】:

我认为这与可编程性、条件语句以及晶体管的有效使用和功能有关,而不是其他任何事情。很明显,如果有电流通过电路,嵌套的 IF 是正确的,但如果解决方案可以通过一千条不同的路径实现,程序怎么知道该怎么做呢?人工智能很有趣,其中记忆和学习远比强大的计算能力重要。

【讨论】:

【参考方案5】:

Screwball 的回复是正确的,并更正了此处提供的一些错误陈述。那些回答分数正值的人完全错过了基于0、+1和-1的三元系统的概念。当俄罗斯人在 1950 年代首次建造时,苏联和美国之间的竞争非常激烈。我怀疑两者之间的政治与美国二元对苏联三元的最终受欢迎程度有很大关系。

根据我的阅读,有一些三元计算机正在使用中。莫斯科的大学有一些在使用,IBM 的实验室也有一些。有其他人的参考,但我无法区分它们有多严重,或者它们是否只是为了实验或玩耍。显然,它们的建造成本要低得多,而且它们使用的能源也少得多。

【讨论】:

我找不到任何关于“正在使用”的计算机的参考。它们都在博物馆或大学的古代玩具中。在过去的 40 年内没有建造。【参考方案6】:

当然,但是三元“位”(tet?)会更复杂,您仍然会存储相同数量的信息,只是在 base3 中而不是 base2 中,并且如果两态组件的强大之处在于简单性.为什么不直接做一个 10-state base10

二进制计算与二进制 AND、OR 和 NOT 门有关,它们极其简单,并且能够组合成任意复杂的结构。它们实际上是您的计算机进行的所有处理的基石。

如果有严重的情况需要切换到三进制或十进制,那么他们会这样做。这不是“他们这样尝试过,结果卡住了”的情况

【讨论】:

旁注:这是一个“trit”,来自三位数字。 旁注#2:实际上,您实际上可以存储更多的东西。对于有符号值,trit 可以保存二进制的 1 和 0,但也可以保存 -1,而无需符号位。对于无符号,trit 可以包含 0、1 和 2。二进制需要 2 位才能相等。在 deca 系统的情况下,您可以通过一点点甚至一点点保存大量信息。【参考方案7】:

要让电路以二进制以外的方式运行,您必须定义其他状态的表示方式。你提出了一个-1、0和+1的系统,但是晶体管不是这样工作的,它们喜欢让电压或电流只在一个方向上流动。制作一个 3 态位需要 2 个晶体管,但您可以用相同的晶体管制作 2 个二进制位,并具有 4 个状态而不是 3 个。二进制在低电平上更实用。

如果您尝试在电路上设置阈值并改用 0、+1、+2,则会遇到另一组不同的问题。我知道的不够详细,但对于逻辑电路来说,麻烦多于它的价值,尤其是当这个行业已经完全致力于二进制时。

有一个领域使用多个级别来获得每个位超过 2 个状态:MLC 闪存。即使在那里,级别的数量也将是 2 的幂,因此可以轻松地将输出转换为二进制以供系统的其余部分使用。

【讨论】:

【参考方案8】:

还有一些理论表明,光纤可以使用光频率(即颜色)来区分状态,从而允许近乎无限(取决于检测单元的分辨率)数量的碱基可能性。

逻辑门对于任何基础都绝对是收费的,但我们以三进制为例:

对于三元异或门,它可以是它正在比较的三个状态中的一个(或任何一个)排他性的,或者是其他三个状态之一。它还可以将三个状态中的两个连接在一起以形成二进制输出。可能性实际上呈指数级增长。当然,这将需要更复杂的硬件和软件,但复杂性应该会降低尺寸,更重要的是降低功率(读取热量)。甚至有人谈到在纳米计算系统中使用三进制,其中有一个微观的“凸起”、“孔”或“不变”来表示三种状态。

现在,我们遇到了一个 QWERTY 类型的问题。 Qwerty 的设计效率低下,因为打字机制不再存在,但今天使用键盘的每个人都学会了使用 qwerty 系统,没有人愿意改变它。当我们达到二进制计算的物理限制时,三进制和更高的基础有一天会突破这个问题。也许再过 20 年都不会,但我们都知道,我们不可能永远继续每年半年将我们的能力翻一番。

【讨论】:

【参考方案9】:

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

但这也增加了复杂性。二进制在许多情况下表现得非常好,使其操作起来非常简单。二进制加法器的逻辑比三进制数(或十进制数)的逻辑要简单得多。

您将无法神奇地存储或处理更多信息。硬件必须更大、更复杂,才能抵消更大的容量。

【讨论】:

这是来自设计硬件的实际经验还是仅仅是直觉? ojblass:它来自于 1940 年代实际制造十进制计算机的人。周围也有三元逻辑门,但三元计算机很少。例如,参见***关于计算硬件历史的文章:en.wikipedia.org/wiki/History_of_computing_hardware,http://… 和 en.wikipedia.org/wiki/Ternary_computer 根据定义,trits 的逻辑比位更复杂。在二进制中,如果您有两个位输入,则您有 2 * 2 == 4 个输出。使用三进制,您有 3 * 3 + 9 个输出。 @IsaacKotlicky 抗噪性与以往一样重要。只要您以某种方式使用电压电平,它们之间的余量就会直接转化为时间和能量。 @Potatoswatter Ternary 可以很好地基于电信号。约瑟夫森结专用存储电路使用定向电流来确定值。所以顺时针=1,cc=-1,off=0(很明显)。与简单的位值三元相比,这具有更多优势。【参考方案10】:

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

【讨论】:

请解释一下为什么运营商的数量是b^(b^i)【参考方案11】:

我很确定,其中很多都与数字信号的错误检查有关。例如,在量子计算中,这项任务几乎是不可能的,但并非不可能实现非克隆原理,而且还因为状态数量增加了。对于两种状态,错误检查的过程并不简单,但相对容易。对于三种状态,错误检查变得无限困难。这也是为什么排除了具有几乎无限多状态的模拟计算机的原因。

如果您对 Quantum Computing 感兴趣,尽管研究一下球体封装和量子错误检查,那里有一些非常简洁的东西。

【讨论】:

作为这个问题的一点更新。我实际上正在考虑有一天尝试实现一个非常基本的基于 FPGA 的三元计算机。【参考方案12】:

我认为三元会更有效。它只是从未流行过。二进制登上舞台,现在切换到三进制将改变我们所知道的一切。

【讨论】:

在硬件层面上绝对不是“更流行”:假设一个简单的二进制逻辑门将 +1V 定义为 0 和 +5V 定义为 1,实际电压将在附近的某个地方 -例如可能是+2V和+3.5V,但仍能正常工作:在这种情况下,区分高低状态仍有合理的差距;对于三元,您必须 a) 具有更严格的操作(以及通过扩展,制造)公差,从而导致更昂贵的铁,和/或 b) 使用更高的电压(例如 +1/+5/+9V),这再次有它自己的工程陷阱(因此再次花费更多)。【参考方案13】:

嗯,一方面,没有比比特更小的信息单位。对比特进行操作是处理信息的最基本、最根本的方式。

也许一个更强有力的原因是因为制造具有两个稳定状态而不是三个稳定状态的电子元件要容易得多。

旁白:你的数学有点不对劲。一个 64 位的三进制数中大约有 101.4 个二进制数字。解释:最大的 64 位三进制数是 3433683820292512484657849089280 (3^64-1)。要以二进制表示,它需要 102 位:101011010101101101010010101111100011110111100100110010001001111000110001111001011111101011110100000000

这个很容易理解,log2(3^64)大约是101.4376

【讨论】:

2 到 6 是 64,3 到 6 是 729...对不起,我太密集了? 你当然是对的……我头疼,但你是对的……你能用有意义的方式纠正这个问题吗? 关于“制造具有两个稳定状态而不是三个稳定状态的电子元件要容易得多”,在更现代的未来可能会发生变化吗? @Pacerier:我不知道,但我不是专家。这可能是physics.stackexchange.com 的问题【参考方案14】:

我相信有两个原因(如果我错了,请纠正我):首先,因为 0 和 1 的值并不是真正的无电流/电流或类似的东西。噪声非常高,电子元件必须能够区分从 0.0 到 0.4 波动的值是 0,从 0.7 到 1.2 是 1。如果添加更多级别,则基本上会使这种区分变得更加困难。

第二:所有布尔逻辑将立即失去意义。而且,由于您可以从布尔门和总和以及其他所有数学运算中实现求和,因此最好有一些可以很好地映射到数学实际用途的东西。假/可能/真之间的任意对的布尔真值表是什么?

【讨论】:

嗯...实际上布尔真值表只是值数=2的特例。您可以很容易地定义三元逻辑en.wikipedia.org/wiki/Ternary_logic 为了使它更有趣,Z/高阻抗状态实际上用于每个标准计算机/电子设备中,以实现可以在一条线上处理多个设备的总线。 我不同意***关于 Z 是逻辑状态的说法。在现实世界中,您不能在所有操作中使用 Z。如何构建与 Z 一起使用的 XOR 门?【参考方案15】:

这很大程度上与比特最终表示为电脉冲这一事实有关,并且构建简单区分“充电”和“不充电”的硬件以及轻松检测状态之间的转换更容易。使用三种状态的系统必须更准确地区分“充电”、“部分充电”和“不充电”。除此之外,电子产品中的“充电”状态不是恒定的:能量最终开始“流失”,因此“充电”状态在实际能量“水平”中有所不同。在三态系统中,这也必须考虑在内。

【讨论】:

其实我认为大多数三元逻辑使用+1、0和-1状态,而不是0、+0.5和+1.0状态。 好吧,不管大多数是什么意思......但我想检测 +1 和 0 之间的差异就像检测 -1 和 0 之间的差异一样容易。 尝试编写仅使用一个 if 语句来区分三个值的代码。 (不允许大小写) 我可以组成一个语言结构吗? @IfLoop 你指的是Fortran的算术If吗?

以上是关于为啥是二进制而不是三元计算? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥.out文件是十六进制而不是二进制

为啥更喜欢二进制补码而不是有符号数的符号和大小?

为啥 Spark 在创建 DataFrame 时会推断二进制而不是 Array[Byte]?

为啥十六进制数字以#而不是0x为前缀?

为啥神经网络输出浮点数而不是整数?

单精度浮点数中的阶码的表示范围为啥不是0~255?