二进制是最好的吗?
进制,是一种人类智慧衍生的计数方式。
我们天生有十根手指,所以人类天然选择了十进制。计票时常用的写 “ 正 ” 字,也类似于五进制。而计算机的二进制是由 0 和 1 组成的,也就是逢二进一,借一当二。
不知道大家有没有过疑问,为什么计算机没有用更常见的进制,而偏偏选择了二进制呢?毕竟计算机也是给人用的,非要转化成一串长长的 0 和 1 ,不是很反人类吗?
之前差评君也看过不少科普,大多都是用一句 “ 电脑只能看得懂 0 和 1 ” 就蒙混过关了,但其实最主要的原因是,计算机出生的年代,二进制是最容易实现的。
其实历史上也曾出现过非二进制的电脑,比如 1945 年诞生的世界上第一台通用计算机 ENIAC,就是一台十进制电脑。
但,计算机是由逻辑电路组成的,而电路中通常只有两个状态 —— 开和关,这两种状态正好可以用 “ 1 ” 和 “ 0 ” 表示。
而 “ 1 ” 和 “ 0 ” 又恰好与逻辑运算中的 “ 对 ”( true ) 与 “ 错 ”( false )对应,这才有了著名的冯.诺依曼结构,也让二进制在计算机上大放异彩。
此后的几十年,二进制计算机越来越先进,各方面的硬件也逐渐完善。现在你用的手机,电脑的显卡,女神的照片,爆肝的游戏,靠的全是二进制。
但其实!二进制并不是效率最高的,理论上讲,e 进制才是最高效的。
e 的大名叫自然常数,也叫欧拉数,是个大约为 2.71828 的无限不循环小数。温馨提示:以上内容为高中数学知识点,不懂的同学把它当成和 π 一样的东西就行。
那为啥说它的效率最高呢?先说说什么是效率,我们简单理解就是,在表达相同信息量的前提下,谁消耗的元件更少,谁的效率也就越高。
举个例子,假如我们要用十进制表达从 0 到 999 的一千个数字,那就要用 0-9 的十个牌子,并且需要三组,一共也就是 30 个牌子。
如果用二进制来表示这 1000 个数字,那我们需要 10 组的 0 和 1,也就是 20 个牌子
如果是三进制的话,需要 7 组的 0 、 1 、 2 ,也就是 21 个牌子,
四进制的话,需要 5 组的 0 、 1 、 2 、 3 ,即 20 个牌子。
……
我们以此类推可以算出每种进制需要用到的牌子数量。
谁用的牌子越少,也就表示谁的效率越高。
然后会发现,在表示 0-999 的问题上,二进制和四进制的效率是最高的。
但是,在这个过程中,每种进制或多或少都出现了 “ 资源浪费 ”。
比如说 10 位的 2 进制,也就是 2 的 10 次方,一共能表达 1024 个数字,已经几乎用完了,但 7 位的 3 进制,一共能表达 2187 个数,也就是说在这个案例中,三进制比二进制能多表达 1163 个数。
我们在计算 “ 需要几位数 ” 的时候是这么考虑的:
log 以 2 为底 1000 的对数约等于 9.97,我们向上取整,所以是 10 位数, 10*2=20,所以二进制需要 20 个牌子。
log 以 3 为底 1000 的对数约等于 6.29,取整数是 7,7*3=21,所以三进制需要 21 个牌子。
……
由此我们发现,这种算法会浪费很多资源,所以为了更准确的计算,我们假设需要的位数可以不是整数,也就不用向上取整。
于是,为了表示 M 个数,在 x 进制下,需要 x*logx^M 个牌子。
所以效率就可以表示成这样一个公式:
E=M/x*logx^M=M/lnM*lnx/x
我们简单求导一下就知道,f`( x ) = MlnM ( 1-lnx )
当 X = e 的时候,原函数取极大值!
如果用图像表示原函数,大概就是这样,这个点就是 e。
也就是说当 x 等于 e 的时候,效率 E 是最大的。
所以得出结论,理论上,e 进制的效率最高。
以上推导过程来自于知乎大佬 “ 白云龙 ”,我们想了很多个例子,可惜都没有大佬这个 “ 倒计时 ” 的例子直观。
ok,咱们前面也提过,e 大概是 2.71828,也就是说 “ 2.71828 进制 ” 是理论上最高效的进制。
但是 2.71828 进制是个什么鬼?我数数手指还得掰个 0.71828 根?
那还得是个整数,不然工程上就没法实现了,而你看这个函数图就知道,相比 2,3 的效率是更接近 e。
由此我们能得出结论,数据表达上,效率最高的是三进制,其次才是二进制。
但为什么咱们现在没用上效率更高的三进制计算机呢?
这就不得不提到那个已经消失国家了。
平衡三进制和 Setun
苏联其实在五十多年前就发现了三进制在计算机上的优势。1958 年,莫斯科国立大学的计算机研究中心研制出了世界上第一台三进制电子计算机 —— Сетунь( setun )。
Сетунь 计算机用的不是一般那种逢三进一的三进制,而是平衡三进制,也叫对称三进制。
什么是平衡三进制呢,就是由 -1、0、1 构成的,对应的逻辑电路就是负电压、零电压和正电压。
平衡三进制是一种很巧妙的设计,它所记录的数字可以表达出全部整数。而且由于 -1 的引入,对负数就不必使用额外的负号了,而二进制是无符号数,不能直接表示负数。
说回 Сетунь 这台计算机,虽然苏联早就看出了三进制的优秀,可一开始莫斯科大学并没有把这个项目当回事儿,只派了四个副博士和几个刚毕业的学生来开发。
但没想到这台计算机在不同的室温下都表现出惊人的可靠性和稳定性。
虽然我觉得以当时苏联还在电子管上狂奔的情况来看,Сетунь 应该是比不上美国同时代的二进制计算机的,但是和同期其它苏联能生产的计算机比,Сетунь 还是优势很大的。
很快,苏联部长会议通过了批量生产Сетунь计算机的决议。不过工业部并不看好这台机器,他们觉得这个经济计划外的玩意儿就是个科幻产物。
与此同时,国内外的订单却像雪花般飞来,10 到 15 台的年产量远远不够应付市场需求。
奇怪的是工业部并没有随着订单数量的增加而增加产量,相反,他们严重限制了生产进度,拒绝订单,并在 1965 年完全停产。
是不是听起来不可思议,其实原因并不复杂,Сетунь 的电子元件良品率极高,而且非常耐造,同时价格还很低,它的售价只有 27.5 万卢布,创造了当时的最低记录,而同期的计算机售价基本都在它的两倍以上。
那台在莫大计算中心的样机整整运行了 17 年,除了在第一年更换了三个有缺陷的元器件之外,内部设备从来没维修过,直到它被摧毁前的一刻都还能正常使用。
而苏联官僚停产了 Сетунь 之后,取而代之的是一种相同性能的二进制计算机,但价格却贵出 2.5 倍。说白了,Сетунь 的生产让苏联官僚少了大笔的财政拨款。
断人财路如杀人父母,所以这台三进制计算机就 “ 理所应当 ” 的成为了政治牺牲品。
虽然 Сетунь 最终只生产了五十台,但从加里宁格勒到雅库茨克,从阿什哈巴德到新西伯利亚,全苏都能看到它的身影。
而且各地都对 Сетунь 的评价很高,大家认为它编程简单,很适合用于工程计算、工业控制、计算机教学等等。
Сетунь 的成功经验让莫大决定不放弃这台计算机,于是他们顶住压力在 1970 年推出了 Сетунь 70 型计算机,而且还对应着二进制的 byte 创建了三进制字节 tryte。每个 tryte 由 6 个 trit 构成,约等于 9.5 个二进制的 bit。
但这个项目长期得不到上级的支持,最后也不得不无限期停滞。Сетунь 70 就此成了莫斯科大学的绝唱。
再后来苏联解体,三进制计算机也跟着苏维埃混入了历史的尘埃,直到今天也没有其他国家能够复现它。
为什么现在没有三进制计算机
虽说Сетунь证明了三进制计算机的可行性,但它没能发展起来,政治原因并不是主要原因。
甚至可以说,三进制计算机的失败,是一种历史必然。
因为即使我们前面在数学上论证了三进制的效率,但也只停留在理论上,从理论到具体实现,经过的步骤太复杂了,因为比如说如果要做三进制计算机的话,就要用三种稳定状态的材料,起码二极管是用不了了。
而二进制只有 “ 0 ” 和 “ 1 ”,高低电压就很好区分,就算有些误差,计算机也可以识别出来,所以在稳定性上会远远高于三进制,在工程上也更容易实现。
所以三进制对效率的提升也许并没有想象的那么美好。
既然它不够稳定,又不能高效提升,工程上还难以实现。为了这么一点可能的红利再从头发展这种技术就显得没必要了。
反观二进制的发展速度,早就快的没影了。
这就好比你玩了好久的养成游戏,已经花了无数个 648,就算没抽出版本之子,也很少有人从零开始玩小号吧。更别说是在越来越离不开计算机的今天,抛弃已经发展完善的二进制体系。
说点看得见的,要是没了二进制,我们现有的硬件体系都要洗牌,大家的电脑手机等电子产品会直接变砖,这事儿听起来也不现实吧。
它是历史还是未来?
不过到了今天,随着芯片的制程越来越小,马上会碰到量子这个玄学领域,量子隧穿这样的难题,我们可能要花非常多的精力,才可能提升一点点效率,就像开了等级上限的⽹游,二进制已经快满级了,也许要开始开辟其他的路了。
而三进制,现在就正在电子计算机以外的形态上复活。
比如,本身电子计算机因为只有开关两种基础状态,但是假如是光子计算机,就有光强、波长、相位、传播方向和偏振五种状态,上海大学的金翊教授团队就取了有无光态和偏振方向正交三个物理状态来尝试光子计算机。
再比如,在 2019 年,我国物理学家郭光灿和中国科技大学的同事就成功完成了三进制 qutrit 量子信号的传输,这也是科学家们在量子领域第一次成功的三进制研究。
近两年,韩国也成功开发出三进制半导体,让三进制计算机又往前迈了一步。
如今,二进制下庞大成熟的工业体系,已经渐渐显现出强弩之末的状态,但想用其他进制来取代它,仍然是不可能的事情。
但当我们看到三进制计算机在历史上的昙花一现的时候,有时候也会畅想,会不会在另一个平行时空,人类并没有选择电子计算机,而是发展出一套完全适配于三进制的系统。
By cp君