||
林肯实验室演义第19回 急系统可靠性阻路,看算盘演变史兴衰
在实验室领导们在忙于处理人事和建设事务的时候,林肯实验室的普通科研人员并没有放松,他们一直在朝着建设全北美最大的防空系统的宏大目标而扎实推进。
早在组织防空系统工程委员会(ADSEC)开展实时处理联网雷达概念演示验证的时候,瓦雷就意识到,这个防空系统的核心不是雷达,而是计算机,尤其是高速、能够可靠运行的计算机,现在,虽然林肯实验室将Forrester教授带领的计算机团队揽入麾下,成功解决了计算速度的问题,但是可靠性的问题依然存在。
在当时,计算机的可靠性问题主要来自存储器,特别是内存。说起内存,这里不等不插播一段,想说一说内存是如何把计算机从计算器转变为电脑的,同时也痛心疾首一下中国的算盘为什么没有能够演变为现在的计算机。
计算作为生活中必备技能在中西方其实都是认可的,随着计算难度的增加,大家都想发明一种计算工具来代替人。在计算器的起步阶段,中西方的思路也基本一样,就是用具体的物件如(小棍)来表示数字,摆摆弄弄,互相比量来计算,即“算筹”,而使用算筹的时代,也叫“筹算”时代。
图1 中国古代玉算筹
图2 古巴比伦算筹
筹算需要一套数字计数系统相辅助,以作为计算的规则。即现在所谓的“进制”。
在公元前2700年到2300年左右的苏美尔文明,曾出现在一个有横隔的泥板,摆上泥丸或者石子,按位累加,放满清空,并在下一列加1的筹算工具——这个计算方法就是进位制的最初起源,而这个筹算工具也可以认为是算盘的起源。所以,和我们普遍认为的不同,算盘并非中国人的发明,我们只是把筹算工具的使用推到了顶峰。
图3 苏美尔算盘模型
显然,算盘把原来需要在桌面上摆的算筹方阵巧妙地整体移到一个框子里,划定好移动范围和移动规则,避免初始筹算需要一大片空间来回移动进行计算,占用空间大且速度慢的缺点。
到了巴比伦时代,筹算规则演变为一种60进制的记数系统。这是用手指计数的产物——用左手大拇指依次触击其余四指的三个关节,类似于中国人常说的“掐指一算”,这样可以数到12,数完一遍,右手屈起一根指头算做一个周期,等到5根手指都屈起,那么总数就是60。这就是12进制的由来,这种手指记数尤其适合清点货物,这也是为什么12进制是世界各地常见的计量单位之一(来往通商嘛)。
图4 巴比伦数字
巴比伦数字系统混淆严重,如上图中61和2看上去没有区别,只是摆开的间距大小不同。后来算盘的发明向西传进入地中海地区,古希腊和古罗马将它改良成便携的青铜工具,拉丁语称为“abacus”(即算盘)。
罗马式算盘采用一种双5进制,横档上,上1珠每珠当5,下4珠每珠当1,这点颇类似中国式算盘的设计,例外的是最右两列:θ列上1珠每珠当6,下5珠每珠当1,可以表示0到11的数字,专门用来处理罗马单位制中的12进制。
图5 两副罗马式算盘,现藏伦敦科学博物馆,上者最右档遗失2珠
罗马算盘小巧灵活,为建筑师、工程师、商人提供了很大的方便,并广泛传播。同一时期的中国汉代,也出现了中国最早算盘记载,见载于东汉末年的《数术记遗》,如下图所示,这是一款非常类似罗马算盘一样的游珠算盘。所以,很难说中国的算盘是否是独立发明的,它与西方算盘非常类似,很可能是丝绸之路东西交流的产物。
图6 中国汉代古算盘
不过,中国算盘的先进之处在它的筹算系统,即数字计数系统。
虽然中国的筹算与巴比伦数字一样只有横竖两个符号,但机智地采用了横竖混排,有效避免了罗马人那样的混淆状况,是第一种有进位的10进制记数法。这种计数系统经过南北朝、宋朝的改进,能够标明小数和正负数,是当时最为先进的计数系统之一。
盘一样的游珠算盘。所以,很难说中国的算盘是否是独立发明的,它与西方算盘非常类似,很可能是丝绸之路东西交流的产物。
图7 中国筹数计数系统的竖式和横式表示法
(注:1069的两种表示法中,虚线框表示空位,代表0)
同时,中国人还有一套快速准确的筹算加减法。早在公元前305年的战国竹简中就给出了完整的乘法表,到南北朝的《孙子算经》则根据“九九表”给出筹算乘法和除法的规则。
图8 公元前305年的《清华算表》,是一个扩充的九九表
整数四则运算只是筹算的低级内容,仅《孙子算经》就还有分数四则筹算法和筹算开平方法,更早的《九章算术》给出了最大公约数筹算法、筹算联立一次方程法、筹算开立方法。南朝的祖冲之用筹算“调日法”得到了圆周率的率355/113,精确到小数点后7位,保持世界记录1千年之久。北宋贾宪发明了筹算增乘开立方法,能给百万数量级的大数精确开立方,并被南宋秦九韶推广,发展出了特定一元四次方程的解法。中国筹算的巅峰应用则出现在元代,朱世杰(1249-1314)在《四元玉鉴》中给出了特定四元高次方程组解法,可用算筹逐次消元化为一元高次方程。
图9 朱世杰《四元玉鉴•四象会元》中的四元术,可见随处标注的筹数
为了完成上述比较复杂的计算,亟需改进和发明先进的筹算工具。于是大致到了元朝,比较完整的中国式算盘终于出现了。中国式算盘把移动不方便的算筹变成灵活的珠子,一个个套在光滑的竹棍上,上下滑动,比挪动算筹快多了。再把竹棍固定在木框里,保证滑不出去,而木框就相当于原来的那个桌几。最后再巧妙的把木框分成上下两区,上珠代表那横置的一个顶五个的算筹,下珠则代表竖放的一个顶一个的算筹,只用手指把珠拨在不同位置就能代表不同的含义。
中式算盘发明之初采用菱形珠子,上1珠每珠当5,下4珠每珠当1,每档能表示0到9的数字,完全复制了算筹的10进制。这种一四算盘在宋代时传入日本,在那里一直沿用至今,并在清代末年传回中国,成为现代会计算盘的主要形制。
图10 《清明上河图》局部,白色虚线框内为算盘,与下面的菱形珠十五档一四算盘同款
但中国本土的算盘到明代时改革成了圆形珠子,上2珠每珠当5,下5珠每珠当1,每档能表示0到15的数字,成为一种16进制和10进制通用的计算工具。这是因为中国的长度和容积单位采用10进制,主要的重量单位却是1斤=16两,所以布店打算盘只需1颗上珠和4颗下珠,粮店打算盘就要7颗珠子全用到了。为了便携,明代以后的算盘还往往减少成13档。
图11 清代十三档二五算盘
中国算盘巧妙的结构,同时再配上珠算口诀和指法,使得我们中国人玩算盘玩到了极致。算盘精熟之后,口诀不用再想,已化为手指的条件反射,数字刚报出来,手指便自动射出,得数随即出来,连脑子都用不大着了。有人甚至能双手同时打两部算盘,那真是到了“出神入化”的地步!到后来,连算盘这个道具也可以不要,人只要在脑子里想象一个算盘,手指如此这般地在空气中拨来拨去,照样能飞快算出数来。这就是所谓“速算法”。再后来甚至连手指都不动,只在脑子里拨珠儿,嘴里吐答案,这种速算法能把外国人吓一溜跟斗!
图12 盲打算盘
然而,任何东西玩到极致都很难回头,算盘作为筹算工具被中国玩到了极致,结果中国人在计算工具的发展上就难以回头了。因为,算盘打的再快,本质它仍然是个筹算的工具,是人使用的工具,是需要人的,也就是说算盘珠子是靠人拨动的,没有人算盘只是摆着的珠子,什么也算不出来。从计算科学的角度来说,算筹和算盘本身不包含任何算法,只能存储计算的中间结果,操作依赖熟记指令的人,本质上只是寄存器。
在16世纪,中西方关于算盘的发展方向开始出现了分歧。
中国人的算盘发展方向是勤勉型的、应用型的。如算盘结构日趋完善,口诀日趋顺口,指法的效率也有了很大提高,让计算速度更快。这里不由得想插评一句,从最求“速度”的角度来技术的革新历来很难有革命性的突破,相反很多革命性突破的前期都是速度很慢,性能根本不如当前已有的系统,如火车等,这说明,我们追求创新不要走错了方向,追求性能提高可能是次要的,追求功能变化才是主要的。
同时,为了迎合主要的计算人群(账房先生)的需求,还出现了算盘与砚台的结合,如图13所示。
图13 算盘与砚台的结合
这虽然让中国珠算水平有了很大提高,但是算盘的本质没有改变。其中的原因有很多,其中我非常认同下面两点原因:
一是中国上千年来数学发展极慢,需要解决的工程计算也很初级,无非什么“鸡兔同笼”“韩信点兵”“勾股容圆”“有女善织”之类,只要四则运算最多加点儿开方就足够了,算盘完全对付得了,所以没有改革的动力。比如,中国就没有17世纪西方国家对外殖民扩张,对航海、测绘、天文定位都出现的难以完成的计算需求。
二是中国一直以来都“文人社会”,文人们善于舞文弄墨,通晓人情世故,自恃清高,而视“科技为淫技奇巧”,不屑于从事技巧工作。所以,中国古代发明多由底层的工匠所为,少有知识分子参与。虽然极尽巧妙,但缺少理论上的高度,提高受限。而知识分子或吟诗作画,或对酒当歌,或立志科举,专攻四书,力克八股,飘飘然当官去了。
此外,我还认为还有一条原因也值得重视:就是中国人勤劳的本质。
中国人勤劳,人多,吃苦耐劳,因此劳动力过剩,所以人力就贱,从成本运作上来说,就没有增加成本改进生产工具的动力。同时,勤劳的人一般不懂得享受,不会偷懒,觉得自己力所能及干的活没必要让自己闲着,然后费劲心思整个机器来干,看着别人干活那是东家的待遇,长工们干活就是了。所以说,本质上,中国没有节省人力的习惯,当然也没有蒸汽革命带来的无尽动力,更没有人考虑自动化带来的人的解放,人们满足于干活干活,于是中国人最喜欢像算盘、就像搓衣板一样的辅助人力性工具,而没有发明像洗衣机、计算机这类的自动化工具。在某种程度来说,“懒”、“以人为本”才是科技发明的动力。
而此时的西方在计工具算上发生革命的变化。
首先是阿拉伯数字的传入。13世纪初,中世纪最伟大的数学家,意大利的斐波那契(LeonardoFibonacci,约1170-约1250)出现了。他在北非经商时学会了“阿拉伯数字”,写成一本《计算之书》(liber abaci,直译“算盘书”),让欧洲人有了进位的概念。阿拉伯数字不但取代了罗马数字,还取代了罗马算盘,因为阿拉伯数字从0到9都设立了单独的符号,借此开发出了一套纸上列竖式的算法,千变万化一目了然,又便于核对,到16世纪就占据了压倒性的优势。
阿拉伯数字将罗马数字和罗马算盘逐出舞台之后,让算术关系变得更加清晰,在近代以来的巨大变革中,欧洲的计算工具走上了完全不同的发展道路。
一个重要的信号是查询式计算工具的出现。最典型的是苏格兰数学家约翰•纳皮尔(John Napier,1550-1617)发明的“纳皮尔的骨头”(Napier's bones)。这套工具主要用来计算乘除法,计算时先用算码凑成一个因数,再根据行号读出与另一个因数每一位的乘积,最后在纸上相加,本质上就是一副活字九九表,如果加入其它扩充的算码还可以用来开方。之后的三个多世纪里,它不断改良,是近代早期欧洲最流行的计算工具,并曾东传中国,被清代数学家当作筹算的分支。
图14 纳皮尔的骨头
但约翰•纳皮尔的数学贡献不只是一副“骨头”,他还是对数概念的提出人,这直接引出了另一种沿用至今的计算工具——计算尺。
17世纪的大不列颠开始对外殖民扩张,航海、测绘、天文定位都出现了难以完成的计算需求,而对数可以化幂运算为乘除法、化乘除法为加减法,法国数学家和天文学家拉普拉斯(Pierre Simon Laplace,1749-1827)曾赞叹:“对数,可以缩短计算时间,在实效上等于把天文学家的寿命延长了许多倍。”
1620年到1630年间,牛津大学和剑桥大学根据纳皮尔的对数原理,发明了更方便的滑尺,分直形和圆形两种,可通过对齐尺子上的刻度查询计算结果——这就是中文“对数”一词的由来。
随后的两个世纪里,工程师和数学家不断为计算尺引入新的刻度,并添加了滑动的游标,发展成现代的多相算尺,可以进行加减法之外所有的算术运算,以及三角函数等超越计算,不同工程领域还常常研发出自己的专业型号。20世纪70年代出现电子科学计算器以前,计算尺都是工程师的身份象征。
图15 计算尺
查询式计算工具蓬勃发展的同时,精密仪器制造业也从15世纪起崛起发展,最初只是一些商业城市用自鸣钟楼来统一作息,以适应日趋工厂化的制造业,到17世纪发展成更加精密的座钟和怀表。
钟表指针的齿轮转动天然地具有进位功能。1642年,法国数学家、物理学家和化学家帕斯卡(Blaise Pascal,1623-1662)借此设计了一台“帕斯卡计算器”(Pascal'scalculator)。长方形的黄铜盒子上开有一列读数窗,下面对应着一行带辐条和指针的齿轮。操作时先像拨盘电话一样逐位输入一个加数,这将显示在上方的读数窗里;再用同样的方式输入另一个加数,读数窗里就会显示出和了。
图16 现存帕斯卡计算器之一,制作于1942年,现存法国工艺美术馆
帕斯卡计算器虽然在功能上远远不及算筹和算盘,却是一次彻底的革命——算筹和算盘本身不包含任何算法,只能存储计算的中间结果,操作依赖熟记指令的人,本质上只是寄存器。帕斯卡计算器却用内部的齿轮机构预存了算法,操作者完全不需要知道计算方法就能操作。
这才是真正的计算器,而不止是计算用的工具。
与帕斯卡类似,德国大数学家、哲学家莱布尼兹(Gottfried Wilhelm Leibniz,1646-1716)也对机械化的计算工具颇有兴趣,他在1672年到1694年之间发明了一种“步进计算器”(Stepped Reckoner),采用了他独创的“莱布尼兹轮”(Leibnizwheel),可以控制齿轮只转动需要的角度。这产生了相当复杂的运算能力,除了普通的加减法意外,还能将两个8位数字相乘为一个16位数字,或者用一个16位的数字除以一个8位数字。虽然莱布尼兹计算器作为人类历史上第一件能实现四则运算的步进计算器,由于造价高昂而没有获得普遍的推广,但这已经奠定了欧洲机械计算器的研发基础。
18世纪,功能日渐强大的机械计算器在欧洲雨后春笋般的涌现出来,比如下面这台从莱布尼兹的设计中衍生出来的计算器就可以切换多种进位制。
图16 莱布尼兹步进计算器
其实,这些新奇的机械计算器跟算盘一样都属于机械,但发展的方向性差别已经体现出来,在哪儿呢?
就在脑手的参与程度上。西方这些机械,人只是把已知数“放上去”,而最关键的一步——计算,让机器“自己干”。也就是说,把珠子摆好后,让它自己动起来!而算盘仍然是只起到寄存器的作用,怎么算全靠人。
帕斯卡的“机械加法器”就体现了这个原理。它是一系列齿轮组成的装置,用儿童玩具那种钥匙旋紧发条做动力,用齿轮转动来做加法,比如转一齿算是加了一个数,遇到“逢十进一”,靠棘轮解决。一旦齿轮转到0,棘爪就“咔嚓”一声跌落下来,推动十位数的齿轮就前进一档,非常巧妙。也就是说,它用发条和齿轮的自动运转,代替了手指的拨动,实现了“让珠子自己动起来”。其实原理跟钟表很相似,也是一级级齿轮、棘轮。西方的钟表非常精巧,到整点时,能出来小人敲钟,弹琴,甚至写中国字!所以机械计算机自动做加法也很好理解。
不过,仅就实用价值来看,这些新奇的机械计算器还不能压倒算盘,但就在四则计算器获得专利的同时,西方又有了新的需求。比如,我们不只算一道题,而是想完成一系列连续的计算,但加法器每算一次都要拨已知数,这很麻烦,也可以说“不成熟”,于是有了“程序”,即“自动连续计算”这个需求。
英国数学家和工程师查尔斯•巴贝奇(Charles Babbage,1791-1871)对这个需求进行了思考,在他的脑海中逐渐出现了现代计算机的雏形。
他首先在1822年设计了差分机(Difference engine),旨在将计算到印刷的过程全部自动化,全面排除人为误差。它由英国政府出资建造,大约有2万5千个零件,重4吨,用蒸汽机驱动,最高可以读写16位数,是人类踏进计算机科学的重大起步,但因为大量精密零件制造困难,从1822到1832年的十年间只完成了1/7,最终1万2千多个还没用到的精密零件都被熔解报废。
图18 差分机1号完成的1/7
失去政府支持后,巴贝奇继续设计了更加精密的分析机(Analytical Engine),能用多项式展开的方法计算对数和三角函数,大约有30米长、10米宽,内存已有20.7kB,用打孔纸带输入,完成类似汇编语言的程序指令,是一种图灵完备的通用计算机。
图19 分析机部分组件的实验模型,巴贝奇自制,现藏伦敦科学博物馆
可惜,同样出于资金和技术的原因,这部超越时代的机器并没能制作出来,但给后世开辟了全新的研发思路。
19世纪晚期,打孔卡和真空管等关键技术相继问世,大大降低了完成同样功能所需的资金和体积,终于在1941年,踏过几个世纪的漫长征途,第一台数字电子计算机问世了。
从上面中西方计算工具的发展脉络可以看出,两者一兴一衰的关键分水岭在于“帕斯卡计算器”的出现。帕斯卡计算器有两个突破:
一是解放了人在运算过程的参与,转变了人在计算中的地位,从闷头干活的“长工”转变为只需分配任务和监督工作的“东家”,说得政治一点儿,这是阶级属性的转变,“从奴隶到将军”。
二是帕斯卡计算器为后续连续的计算器的发展提供了可能,进而启发了复杂计算中的存储需求,即内存。因为有了内存,复杂计算时产生的临时和最终结果就有地方放,无须靠人用纸笔记录。编好的程序也有地方放。再加上外存,即硬盘光盘等等,就有海量的资源使用。所以说,存储能力是计算机之所以可以叫“电脑”而不是计算器的核心能力,这是个不得了的思想。
后来冯-诺伊曼所提出的计算机结构也是建立在此基础之上的,如下图所示。
图20 冯-诺伊曼计算机结构
所以说,内存是给计算机带来能力飞跃的核心设备。
内存设备的发展也是很值得玩味的,其中Forrester教授带领团队在其中做了开创性的工作,不仅满足林肯实验室项目研制的需求,而且为现代通用电子计算机的发展打下来基础。具体内容我们在下一回里面再讲。
注:本回关于算盘的演变史的内容主要借鉴了网名“闲云若海”的一篇很有见地的博文《中国电脑为什么没进化出电脑》(详见http://blog.sina.com.cn/s/blog_53c57b9d010136ek.html)和刘大可的科普性很强的文章《为什么中国人用算盘,西方人用计算机》(详见https://baijia.baidu.com/s?old_id=150443)。
特向两位未见面的朋友表示感谢!
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-7 22:10
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社