现今的计算机都使用“二进制”数字系统,尽管它的计算规则非常简单,但其实“二进制”逻辑并不能完美地表达人类的真实想法。相比之下,“三进制”逻辑更接近人类大脑的思维方式。因为在一般情况下,我们对问题的看法不是只有“真”和“假”两种答案,还有一种“不知道”。在三进制逻辑学中,符号“1”代表“真”;符号“-1”代表“假”;符号“0”代表“不知道”。显然,这种逻辑表达方式更符合计算机在人工智能方面的发展趋势。它为计算机的模糊运算和自主学习提供了可能。只可惜,目前电子工程师对这种非二进制的研究大都停留在表面或形式上,没有真正深入到实际应用中去。
不过,凡事都有一个例外,三进制计算机并非没有在人类计算机发展史上出现过。其实,早在上世纪50、60年代。一批莫斯科国立大学的研究员就设计了人类历史上第一批三进制计算机“Сетунь”和“Сетунь 70”(“Сетунь”是莫大附近一条流入莫斯科河的小河的名字)。
“Сетунь”小型数字计算机的设计计划由科学院院士С·Л·Соболев(转载者注:大名鼎鼎的soblev,索伯列夫空间就是以他名字命名的)在1956年发起。这个计划的目的是为大专院校、科研院所、设计单位和生产车间提供一种价廉物美的计算机。为此,他在莫大计算机中心成立了一个研究小组。该小组最初由9位年轻人(4名副博士、5名学士)组成,都是工程师和程序员。С·Л·Соболев、К·А·Семендяев、М·Р·Шура-Бура和И·С·Березин是这个小组的永久成员。他们经常在一起讨论计算机架构的最优化问题以及如何依靠现有的技术去实现它。他们甚至还设想了一些未来计算机的发展思路。
“三进制计算机之父”С·Л·Соболев
随着技术的进步,真空管和晶体管等传统的计算机元器件逐渐被淘汰,取而代之的是速度更快、可靠性更好的铁氧体磁芯和半导体二极管。这些电子元器件组成了一个很好的可控电流变压器,这为三进制逻辑电路的实现提供了可能,因为电压存在着三种状态:正电压(“1”)、零电压(“0”)和负电压(“-1”)。三进制逻辑电路非但比二进制逻辑电路速度更快、可靠性更高,而且需要的设备和电能也更少。这些原因促成了三进制计算机“Сетунь”的诞生。
“Сетунь”是一台带有快速乘法器的时序计算机。小型的铁氧体随机存储器(容量为3页,即54字)充当缓存,在主磁鼓存储器中交换页面。这台计算机支持24条指令,其中3条为预留指令,目前不用。
三进制代码的一个特点是对称,即相反数的一致性,因此它就和二进制代码不同,不存在“无符号数”的概念。这样,三进制计算机的架构也要简单、稳定、经济得多。其指令系统也更便于阅读,而且非常高效。
在这群天才青年日以继夜的开发和研制下,“Сетунь”的样机于1958年12月准备完毕。在头两年测试期,“Сетунь”几乎不需要任何调试就运行得非常顺利,它甚至能执行一些现有的程序。1960年,“Сетунь”开始公共测试。
1959年时的“Сетунь”
1960年4月,“Сетунь”就顺利地通过了公测。它在不同的室温下都表现出惊人的可靠性和稳定性。它的生产和维护也比同期其它计算机要容易得多,而且应用面广,因此“Сетунь”被建议立即投入批量生产。
1961时的“Сетунь”
不幸的是,苏联官僚对这个不属于经济计划一部分的“科幻产物”持否定的态度。他们甚至勒令其停产。而此时,对“Сетунь”的订单却如雪片般从各方飞来,包括来自国外的订单,但10到15台的年产量远不足以应付市场需求,更不用说出口了。很快,计划合作生产“Сетунь”的捷克斯洛伐克工厂倒闭了。1965年,“Сетунь”停产了。取而代之的是一种二进制计算机,但价格却贵出2.5倍。
“Сетунь”总共生产了50台(包括样机)。30台被安装在高等院校,其余的则在科研院所和生产车间落户。从加里宁格勒到雅库茨克,从阿什哈巴德到新西伯利亚,全苏都能看到“Сетунь”的身影。各地都对“Сетунь”的反应不错,认为它编程简单(不需要使用汇编语言),支持反向波兰表示法,适用于工程计算、工业控制、计算机教学等各个领域。
有了“Сетунь”的成功经验,研究员们决定不放弃三进制计算机的计划。他们在1970年推出了“Сетунь 70”型计算机。“Сетунь 70”对三进制的特性和概念有了进一步的完善和理解:建立了三进制字节——“tryte”(对应于二进制的“byte”),每个三进制字节由6个三进制位(“trit”,约等于9.5个二进制位“bit”)构成;指令集符合三进制逻辑;算术指令允许更多的操作数长——1、2和3字节(三进制),结果长度也扩展到6字节(三进制)。
“Сетунь 70”
对“Сетунь 70”而言,传统计算机的“字”的概念已经不存在了。编程的过程就是对三进制运算和三进制地址的操作。这些基于三进制字节的命令将会通过对虚拟指令的编译而得到。当然,程序员们不必考虑这些——他们只需直接和操作数及参数打交道即可。
操作员在使用“Сетунь 70”
“Сетунь 70”是一台双堆栈计算机。其回叫堆栈用来调用子程序。这一简单的改进启发了荷兰计算机科学家艾兹格·W·迪科斯彻,为他日后提出“结构化程序设计”思想打下了基础。 “Сетунь 70”成了莫斯科国立大学三进制计算机的绝唱。由于得不到上级的支持,这个科研项目不得不无限期停顿下来。
这是三进制计算机“Сетунь”的结构图,懂俄文的朋友可以看一下,有些单词我也不认识。
原文地址:http://www.computer-museum.ru/english/setun.htm]Development of ternary computers at Moscow State University
原帖所在论坛提出了一个观点,即以e(自然对数函数的底数,又称为欧拉数,约等于2.7)为底的进制基础设计的计算机是运行效率最高的计算机。因此最靠近e的三进制计算机从设计原理上说最为科学。姑且不论工程上实现的难度如何,在数学上可以证明确是如此。但从原帖回帖情况来看,似乎很多人不明白道理所在,故下面做一个简单的说明。
设计算机采取k进制,k可以是任何正整数,也就是说,计算机内存储的数据(此处只考虑存储正数的情况,避免讨论负数,因为它们要占用的符号位)将表示成以k为权的级数形式:
x=(a_1cdotk^{n-1}+...+a_{n-1}cdotk^1+a_ncdotk^0)+a_{n+1}cdotk^{-1}+...
诸a_i都是非负实数。括号内的是x的整数部分,后面是小数部分。
因为计算机采取k进制,每个权位上的a_i将有k种取值,故需要k个记号来表示,比如5进制,a_i取值集合将是0,1,2,3,4这五个记号组成的集合。
现在假定计算机由r个m态的(比如二极管有通-断两个态,就是2态的)物理元件构成,用来表达这些a_i。从而计算机总共有rm种不同的态(不同位置的元件的同种状态显然不能算作相同)。一般来说,r相对于k来说是非常大的,即rm远大于k。故{rm}/k ~~[{rm}/k]。因此这些元件总共可以表示{rm}/k位k进制正整数。每个数位上又有k种a_i来选择,所以最多可以表示N(k)=k^{(rm)//k}个k进制正整数。求得N'(k)=N(k)frac{rm}{k^2}(1-lnk)。由此知k=e时N(k)取到极大值。比较N(3)与N(2):
({N(3)}/{N(2)})^6=(frac{9}{8})^{rm},即ln(N(3))-ln(N(2))=O(rm),这就是三进制计算机优于二进制计算机的数学原因。 |