引子
一个问题:世界上谁发明了第一台机械式计算机?
长久以来,学界一致认为是布莱士·帕斯卡(Blaise Pascal)——对,就是那个成为压强单位的法国大物理学家帕斯卡。不过他发明的机器我们下回分解,今天的主角另有其人。
1935年,后人在整理天文学家开普勒(对就是那个成为望远镜的开普勒)留下的研究资料时发现了几张三百年前的图纸,当时人们不知道上面画的是什么玩意儿,直到22年后的1957年,一位开普勒的传记作者才认出来,那是史上真正的第一台机械式计算机,它比帕斯卡机的诞生早了约20年。
我想帕斯卡是不会在意失去这第一的位置的。
这副草图从开普勒的一本书中滑落,八成是用做书签了,谢天谢地开普勒没有随手丢弃,尘封的历史才得以重见天日。
这副草图出自一位名不见经传的德国天才威廉·契克卡德,你一定闻所未闻,在历史的长河中他能有所留名也正是仰仗了这台只在纸上留传下来的机器,如果不是研究计算机历史,我们肯定对帕斯卡和开普勒更感兴趣。
那么这台机器是如何计算的呢?它的稿纸又为什么会出现在开普勒的遗产中呢?且听我细细道来。
早年
契克卡德的人生轨迹非常简单,几乎一辈子都没怎么离开家乡。他出生于德国一个叫黑伦贝格(Herrenberg)不是呼伦贝尔啊的小镇,长大后去了离家只有几十公里远的图宾根大学学习神学和犹太语,17岁获得学士学位,19岁硕士毕业,妥妥的文科生一枚。毕业之后又在学校深造了两年,继续钻研阿拉米语、希伯来语这一类撰写圣经的犹太语,21岁踏足社会,第一份工作专业对口——路德教会的牧师,一干就是6年。也许是学术水平过于出众,27岁年纪轻轻就被母校聘为教授,教了12年的希伯来语。
然而这中规中矩的职业生涯却是假象,契克卡德并不是个「安分守己」的「语文老师」,他的研究领域甚为广泛,上至天文学、下至测量学,既hold得住数学、又搞得了发明,他在地图绘制领域颇有建树,还造过一台组合希伯来语词根的教具,甚至对政治也很有见地,专门写过论文[1]。智力水平自有教授之职来证明,动手能力居然还有雕刻家之名在任性。这也难怪,人家出生雕刻世家,爷爷和父亲都是干这行的。
俗话说物以类聚人以群分,这样一位令人惊叹的全才自会交到同样令人钦佩的天才,说的就是约翰尼斯·开普勒。
俗话又说所谓缘分就是人生轨迹的交集,开普勒年轻时的人生轨迹和契克卡德简直一毛一样:同样求学于图宾根大学,同样在路德教会当过牧师,还「共享」了同一位恩师——Michael Maestlin。正是这位恩师,在1617年开普勒回图宾根办事的时候引见了二人。
恩师内心OS:契克卡德这小伙子不错啊,两个都是我引以为傲的学生,一定能擦出点基情的小火花,十八只蹄髈势在必得,嘿嘿嘿。
这一年,开普勒46岁,契克卡德25岁,一个是曾经的牧师,一个还正在教堂干着,在教会以地心说维系统治地位的时代,两个「离经叛道」的日心说支持者一见如故。除了探讨天文学上的问题,开普勒还请契克卡德为他的书制作木刻插画[2]。开普勒离开图宾根后,两人还保持着书信联系,契克卡德甚至还帮忙照看了正在图宾根上学的开普勒之子。
1623年9月20日,契克卡德在信中提到自己构思了一种计算机器,可以帮助开普勒计算月球轨道和星历表,开普勒当然很感兴趣,回信讨要了一台。契克卡德便委托当地一位叫约翰尼斯·菲斯特的能工巧匠制造这台机器,结果还没造好呢,就在1624年2月22日夜间的一场火灾中毁了,契克卡德本来就对齿轮的做工不够满意,也懒得再造了,只得在三天之后写信告知开普勒这个噩耗,并附上了一些「纸上谈兵」的图文解说。
学术界基本认为,契克卡德在写第一封信时已经建成了一台原型机,只不过这台机器也最终下落不明,没能留下任何实物。
计算钟Rechenuhr
契克卡德这台传说中的机器后来被称为Rechenuhr,德语中Rechnen
表示「算术」,uhr
表示「时钟」,Rechenuhr便通常译为「计算钟」。跟「钟」有什么关系呢?因为当计算结果溢出(超出6位数)时,机器会发出响铃警告,这样的设计在当时可谓相当智能。
契克卡德的手稿被辨认之后,图宾根大学一位名叫布鲁诺·冯·弗雷塔格-洛林霍夫(Bruno von Freytag-Löringhoff)的学者立刻开展了相关研究,并于1960年做出了计算钟的复制品。
计算钟支持六位整数计算,主要分为加法器、乘法器和中间结果记录装置三部分,它们虽然集成在同一台机器上,但相互之间没有任何物理关联。位于机器底座的中间结果记录装置是一组简单的置数旋钮,主要是为了省去计算过程中笔和纸的参与,没什么可说的,我们详细了解一下加法器与乘法器的实现原理和使用方法。
乘法器
乘法器部分其实就是对圆柱形纳皮尔筹的封装,将0~9
的乘法表印在圆柱面上,圆柱顶端的旋钮分有10个刻度,每旋转36°,就能依次将0与0~9
的乘积、1与0~9
的乘积……9与0~9
的乘积面向使用者。共有6根圆柱,依次旋转6个旋钮即可完成对被乘数的置数。横向有2~9
八根掏有空窗的挡板,代表乘数,左右平移某根挡板便可露出6根圆柱在这一行上的数字,即该乘数与被乘数每一位的乘积。
以上面这张纪念邮票上的图案为例,被乘数通过机顶旋钮置为100722,乘以4,就移动4的那根挡板,露出100722各位数与4相乘的积:04、00、00、28、08、08,心算将其错位相加得到最终结果402888。
加法器
加法器部分通过齿轮实现累加功能,6个旋钮同样分有10个刻度,旋转旋钮就可以置六位整数。为让大家可以清晰直观地了解单个旋钮的内部结构,有请我的御用设计师S7制作精美的爆炸图:
需要加上一个数时,从最右边的旋钮(表示个位)开始顺时针旋转对应格数。以笔者生日(1991年3月15日)为例,计算
这一过程最关键的就是通过齿轮传动实现的自动进位。计算钟使用单齿进位机构(single tooth carry mechanism),通过在轴上增加一个只有一个齿的齿轮来实现,不妨称之为单齿轮。
我们约定一下:
- 进位由低位的传动轮与高位的传动轮相互作用完成,前者简称低位轮,后者简称高位轮;
- 每个传动轮都由一个单齿轮和一个十齿轮构成;
- 高位轮与低位轮之间存在一个辅助轮。
图中,右上方联动的为某低位的单齿轮与十齿轮,每顺时针旋转一周,左下方的辅助轮就被带动一格。注意,辅助轮的转向是逆时针的。要在进位时保证高位轮和低位轮的旋转方向一致,就必须增加这样一个辅助轮。
下面我们把高位轮也画出来,并将低位的齿轮间距还原到正常的样子,观摩一下这一进位的整体过程:
你会发现与低位轮相反,高位的单齿轮位于十齿轮背后。事实上,6个数位的传动轮,其单齿轮和十齿轮的前后顺序都是这样依次交替的,5个辅助轮也相应的一前一后不断交替。开动一下脑筋,想想为什么需要这样设计。
单齿进位的原理看似简单,在实际实现时,其实很难使高位轮严格旋转36°,复制品做了一些优化才得以成功。
相信聪明的读者已经可以想到减法怎么做了,没错,就是反向旋转加法器的旋钮,单齿进位机构同样可以完成减法中的借位操作。
此外
而用这台机器进行除法就有点「死脑筋」了,你需要在被除数上一遍又一遍不断地减去除数,自己记录减了多少次、剩余多少,分别就是商和余数。
由于乘法器单独只能做多位数与一位数的乘法,因此通常需要使用加法器配合完成多位数的相乘:
- 被乘数先与乘数的个位相乘,乘积置入加法器;
- 再与乘数十位数相乘,乘积后面补个0加入加法器;
- 再与百位数相乘,乘积后补两个0加入加法器;
- 以此类推,最终在加法器上得到结果。
计算钟是纳皮尔筹的一种改进,有了加法器,不但弥补了纳皮尔筹不能做加法的缺陷,还为多位数乘法提供了有力助攻。
总的来说,计算钟结构比较简单,但依然是人类从手动计算到自动计算的伟大初探,是计算机史上一个重要的里程碑。
后话
契克卡德的一生短暂而精彩。
1631年,随着恩师Maestlin的与世长辞,契克卡德接过了他数学、天文学教授的交椅,正式成为天文学领域的专家。此后的契克卡德继续秉持着爱好广泛、「不务正业」的特质,除了正课,还在大学里讲授建筑学和水力学,简直无所不能。
直到规模浩大的欧洲三十年战争如凶猛的洪水倾覆了契克卡德的人生之舟。1634年,天主教的军队占领了图宾根,也带来了可怕的黑死病,契克卡德一家无人幸免。一年后,这位年仅43岁的年轻教授在先后目睹了妻子和子女的离世之后,自己也于10月份离开了人世。
1651年,月球表面的一座环形山被命名为契克卡德[3]。如今,图宾根大学的计算机学院也叫契克卡德计算机学院(the Wilhelm-Schickard-Institut für Informatik),以纪念这位鼻祖级的杰出校友。
他所留不多,有点分量的仅是在计算机史上占据一角的那两封书信。但我相信,他的才学,影响过图宾根的亲友,启迪过数以百计的优秀学子,这些微妙的影响,像一只绚丽的蝴蝶扇动了翅膀,改变着那以后的世界。
参考文献
- JOC/EFR. Wilhelm Schickard biography[EB/OL].
- Wikipedia. Wilhelm Schickard[EB/OL].
- Wikipedia. Johannes Kepler[EB/OL].
- History of Computers. The Rechenuhr (Calculating Clock) of Wilhelm Schickard[EB/OL].