最精确计算器(人类追求计算自动化重要物证)
最精确计算器(人类追求计算自动化重要物证)在17世纪的欧洲,似乎掀起了一场追求计算自动化和研制计算工具的浪潮,仅仅在半个世纪里就先后诞生了纳皮尔骨筹、对数计算尺、史卡特计算器、帕斯卡计算器、莫兰计算器、莱布尼茨计算器等计算装置。其中,前两者均是计算辅助工具,史卡特计算器和莫兰计算器的设计原理依然是纳皮尔骨筹,这四者的计算过程均需要手动参与;帕斯卡计算器虽然实现了自动化,但严格意义上讲它还只是一台加法器,其齿轮只能往一个方向拨动,并且对于乘除运算无能为力。而莱布尼茨设计的计算器,不仅能够进行加减乘除四则运算,而且还真正实现了自动化,标志着人类追求计算过程自动化之梦想的真正实现。德国著名哲学家、数学家莱布尼茨(G.W. Leibniz,1646-1716)为世人所知,多半是因为他发现了微积分(Calculus)这一数学概念并创造了我们今天所使用的微积分符号,但大多数人并不知道他在漫长的计算器发展史和计算思想发展史中是一位重要的奠基者。
细微处窥见时代风貌 体认中领略器物之美
撰文 | 张涛
来源:清华大学科学博物馆
莱氏计算器人类进入当前以计算机为代表之一的信息时代,经历了漫长的发展历程,其中计算器的发明与发展起到了关键作用。在这一过程中,莱布尼茨计算器是一项里程碑式的发明,它不仅能够进行加减乘除四则运算,而且真正实现了计算过程的自动化,其设计理念和核心部件引领了此后机械计算器200余年的发展进程。收藏莱布尼茨计算器并研究其设计理念、核心部件、使用方法、内部结构、进位方式,对于研究和了解人类探索计算自动化之历程具有重要意义。
莱布尼茨十进制四则运算手摇机械计算器
清华科学博物馆复原了莱氏计算器的“阶梯滚轮”装置,并在“神机妙算——计算器具历史展”中展出
人类进入当前的信息社会,尤其是进入当前流行的计算主义时代,从酝酿到成熟,经历了近400年的缓慢发展历程。但是,由于特殊的国情,中国进入信息社会几乎是在短短十几年内完成的,并没有像西方社会那样经历过漫长的过渡。这种科技史记忆的缺失,尤其是科技史器物的缺失,并不利于我国思想界深入反思信息社会的本质,也不利于我国科技教育界理解科技发展的一般规律和科技创新的一般原理。因此,研究西方计算器史,并以此为基础研究西方计算思想史,并同时在科学博物馆中开设计算器展区,对于中国思想界和中国科技教育界的发展,均具有基础性的理论意义和急切的现实意义。
德国著名哲学家、数学家莱布尼茨(G.W. Leibniz,1646-1716)为世人所知,多半是因为他发现了微积分(Calculus)这一数学概念并创造了我们今天所使用的微积分符号,但大多数人并不知道他在漫长的计算器发展史和计算思想发展史中是一位重要的奠基者。他系统地发明了二进制算数,提出了“通用字符理论”,这二者均成为了信息社会的根基。此外,莱布尼茨对信息社会更直接的贡献,是他发明的能够对十进制数字进行加减乘除自动化运算的手摇机械计算器。
在17世纪的欧洲,似乎掀起了一场追求计算自动化和研制计算工具的浪潮,仅仅在半个世纪里就先后诞生了纳皮尔骨筹、对数计算尺、史卡特计算器、帕斯卡计算器、莫兰计算器、莱布尼茨计算器等计算装置。其中,前两者均是计算辅助工具,史卡特计算器和莫兰计算器的设计原理依然是纳皮尔骨筹,这四者的计算过程均需要手动参与;帕斯卡计算器虽然实现了自动化,但严格意义上讲它还只是一台加法器,其齿轮只能往一个方向拨动,并且对于乘除运算无能为力。而莱布尼茨设计的计算器,不仅能够进行加减乘除四则运算,而且还真正实现了自动化,标志着人类追求计算过程自动化之梦想的真正实现。
自莱布尼茨之后,机械计算器设计愈发精巧,在19世纪末逐渐实现了量产,于20世纪初得到普及,并逐渐通过与电机和按键的结合变得更加省力,直到20世纪末被现代电子计算器所取代。但是,在莱氏计算器后续200余年的机械计算器的发展史中,其设计理念及其核心部件仍然发挥着主导作用,之后的各类机械计算器均可以从莱氏计算器中找到影子。可见,莱氏计算器在人类追求计算过程自动化的历程中具有里程碑式的意义。
1、莱氏计算器制造及其研究简史莱布尼茨在世之时,他的计算器就已经得到了广泛的关注和研究,并直接推动了机械计算器的发展。他的第一台计算器还是一个比较简单的木制模型,于1673年2月1日在伦敦的皇家协会得到公开展示,与会的胡克(Robert Hooke)对其进行了非常细致的研究,甚至尝试研制一台更先进的计算器出来,以争夺四则运算计算器的发明权。
莱布尼茨于1673年5月在巴黎研制的第二台计算器,由黄铜制成,拥有4个输入位、12个输出位,可以对4位数(千位)进行计算,输出结果可以达到12位数(千亿位);于1675年1月9日在法国皇家科学学院得到展示。莱布尼茨于1675年在巴黎研制的第三台计算器,也是由黄铜制作,已经拥有7个输入位、12个输出位;这台计算器在巴黎的不同地点得到过多次展示,并于1676年10月18日交给了英国皇家协会秘书奥登伯格(Heirich Oldenburg)。
莱布尼茨于1697年完成了第四台计算器的研制,在几番改进之后,拥有8个输入位、16个输出位,经常由莱布尼茨亲自携带或单独外借到欧洲各地公开展示。为此,莱布尼茨于1704年左右还特意为计算器订制了一个木质盒子,以起到保护作用。应该说,莱氏计算器的这些公开展示活动,直接推动了机械计算器的发展,甚至掀起了欧洲研制四则运算机械计算器的高潮,我们在莱氏计算器之后出现的几台机械计算器中,都能发现其影响。
莱布尼茨死后留下了20多万张手稿,却被汉诺威王室长期封存,这严重阻碍了莱布尼茨思想的传播,莱布尼茨对机械计算器的贡献也因此被遗忘了。在莱布尼茨去世之后,他的计算器流落到了哥廷根,在那里待了一个多世纪,先是在哥廷根大学的模型陈列室里安放着,然后又闲置于大学图书馆的阁楼里。
直到19世纪末,在历史主义思潮的影响下,莱布尼茨的重要性日益突出,莱布尼茨手稿的整理工作逐渐被提上日程,莱氏计算器也开始进入当时的学术视野。例如,第一篇研究莱氏计算器的学术文献,应该是威廉·乔丹(Wilhelm Jordan)于1887年发表的德文文章《莱布尼茨的机械计算器》,他在文中对莱氏计算器的基本原理进行介绍,并手绘了几幅图纸。
也是在19世纪末,伴随着机械计算器制造业的逐渐成熟,以及商业需求的逐渐加大,莱氏计算器得到了机械计算器制造商们的重视和研究,从而再次推动了机械计算器的发展。例如,在1893年,著名的计算器制造商Arthur Burkhardt对莱氏计算器进行了研究,这帮助他在莱布尼茨“阶梯滚轮”的基础上发明了更小巧的“阶梯鼓轮”(stepped-drum),对机械计算器的发展起到了重要推动作用。
在此大氛围之下,1897年莱氏计算器终于被藏入现在的莱布尼茨档案馆,得到了专门保护。在1924年,著名的机械计算器制造公司Brunsviga成功复制了第一台莱氏计算器,此后又复制了4台。截止目前,在德国境内已至少拥有14台莱氏计算器复制品,大都是由机械计算器制造商、博物馆或研究机构制造的。
施泰因(Erwin Stein)于1990年组织了莱布尼茨展览(Leibniz-Ausstellung),推动了学界对莱布尼茨技术发明家形象的关注;施泰因于2005年复制了一台莱氏计算器,并将其复制过程、机械图纸、数学原理等内容公开发表到学术期刊上,开启了莱氏计算器研究的另一种研究方式。在2014年,他与瓦尔斯道夫(Ariane Walsdorf)、巴杜尔(Klaus Badur)和柯浦(Franz Otto Kopp)合作出版了研究莱氏计算器的德语专著《最后的珍品》,可谓集莱氏计算器研究之大成。
2、藏品概览、设计理念及其使用方式虽然莱布尼茨一生实际共研制过4台计算器,但是只有最后一台得以存世,它于1697年在汉诺威由钟表制造师谢尔普(Adam Scherp)制成,后来先后辗转各地交由不同的机械师改进,直到莱布尼茨去世的前几年才改进完成,目前存放在汉诺威的莱布尼茨档案馆(见图1)。
1)藏品概览
因为经常要被运到其它地方去供人鉴赏,莱布尼茨为这台计算器设计了一个由胡桃木和橡木制成的盒子,以起到保护作用。机器的主体部分是由铁和黄铜制成,长宽高分别约为780mm、320mm、150mm;去掉木质盒子的盖板之后,总重量约14kg。这台计算器一共有8个输入位、16个输出位,换言之,可以对8位数(千万)进行加减乘除四则运算,输出结果可以达到16位数(千万亿)。机器主体部分,主要由输入装置和计算装置两大部分组成。输入装置在机器较靠前的位置,是一个相对较独立的整体,可以通过摇动左侧的滑板曲柄,在螺纹中轴上左右移动,以方便进行乘除法运算,起到类似于在笔算法中将乘数的不同数位分别与被乘数相乘的效果。
2)阶梯滚轮及其设计理念
莱氏计算器的突破,是可以进行加减乘除四则运算。在它之前的帕斯卡计算器,实际上只能进行加法运算,只能把齿轮单个地往同一个方向拨动,其减法运算需要通过更换显示栏的遮挡条来实现;因此,严格意义上讲,“帕斯卡计算器”的学名应该是“帕斯卡加法器”。莱氏计算器之所以能够进行乘除运算,主要是借助于他发明的“阶梯滚轮”(见图2),也正是这个关键的零件主导了后世200多年的机械计算器的发展,为此,英语学界称其为“莱布尼茨轮”(Leibniz Wheel)。
莱布尼茨轮的设计理念是:首先,从根本上说,加减乘除四则运算最终都可以还原为机械叠加,减法是加法的逆运算,乘法是加法的重复运算,除法是乘法的逆运算。
其次,将从0到9的10个个位数值,转换成阶梯滚轮上的10个阶梯的长度值。
如图2,数值0对应的阶梯长度是“无”,数值1对应的阶梯长度是最长的,数值9对应的阶梯长度是最短的,以此类推。
第三,阶梯滚轮推动与它相接的齿轮转动,即可实现计算的功能。例如,图2中的计数齿轮对准了阶梯滚轮的2号阶梯,当阶梯滚轮旋转1圈之后,计数齿轮会拨动2个齿格,相当于实现了2×1的计算;如果阶梯滚轮转动3圈,计数齿轮会拨动6个齿格,相当于实现了2×3的计算。
第四,十进制数的进位,是通过更换数字的排列位置实现的,例如,001、010、100依次相差十倍。同理,虽然每一个阶梯滚轮装置单独对它所接收的数值进行计算,但是如果将多个阶梯滚轮装置排列起来,也就实际上表达了对不同数位上的数值的计算。
3)使用方法
莱氏计算器奠定了后世机械计算器的设计基础,在现代电子计算器兴起之前,市场上所广泛使用的几种机械计算器,其使用方法均与莱氏计算器类似。我们接下来以654321和987的加减乘除四则运算为例,阐释莱氏计算器的操作过程。
1.加法和减法运算要计算
654321 987,参考图1,共需6步:
①归零。通过旋转滑板曲柄,将输入装置移动到最右侧,并将8个输入旋钮、16个结果显示器都归零。
②输入被加数。通过旋转输入旋钮,完成对数值654321的输入;此时,数值大小已经转变成了阶梯滚轮的阶梯长度。
③存储数值。顺时针旋转动力曲柄1圈,将654321传输到计算箱上保存起来,相当于完成了0 654321的计算;此时,阶梯滚轮推动了计算箱上的齿轮的转动。
④输入加数。旋转输入旋钮,完成对数值987的输入。
⑤计算。顺时针旋转动力曲柄1圈,完成654321 987的计算。⑥读数。读出结果显示器上的数值即可。
由于减法运算是加法运算的逆运算,要计算654321-987,除了在步骤⑤中需要把动力曲柄逆时针旋转1圈之外,其它步骤与计算654321 987均相同。乘法运算是加法运算的叠加运算,上面的步骤③其实相当于完成了654321×1的计算,如果要计算654321×987,理论上可以通过旋转动力曲柄987圈来实现。
2.乘法运算
莱布尼茨设计了一个更简便的乘法运算方法:
①归零。
②输入被乘数654321。
③计算。首先,顺时针旋转动力曲柄7圈,完成 654321×7 的计算;其次,旋转滑板曲柄,使输入装置向左移动一个数位,对准输出显示器上的十位数,再顺时针旋转动力曲柄8圈,完成654321×80的计算;最后,再次旋转滑板曲柄,使输入装置再向左移动一个数位,对准输出显示器上的百位数,然后顺时针旋转动力曲柄9圈,完成654321×900的计算。
④读数。
可见,莱氏计算器的乘法运算原理,与我们经常使用的笔算法类似,将被乘数与乘数的不同数位分别相乘,然后将乘积结果相加;只不过,莱氏计算器将这两个步骤综合了起来,即时地显示了每一次计算的结果。
3.除法运算
除法是乘法的逆运算,在笔算法中除法运算比较复杂,需要用除数从被除数的最高位开始逐位试错,莱氏计算器也依据了同样的原理。要计算654321÷987,需要经过6个主要步骤:
①归零。
②输入被除数654321。
③存储数值,此时结果显示器上已显示654321。
④输入除数987。
⑤计算。首先,旋转滑板曲柄,使除数的最高位“9”对准结果显示器上的最高位“6”,然后逆时针旋转动力曲柄,计算器会出现卡顿,表示无法除尽,如此便完成了654÷987的计算,结果是除不尽(这一步也可以省略);其次,旋转滑板曲柄,使除数的最高位“9”对准结果显示器上的次高位“5”,然后向逆时针旋转动力曲柄,最多只能旋转6圈,此时结果显示器显示“62121”,记转器显示“6”,便得到了6543÷987 的计算结果“商6余62121”;第三,旋转滑板曲柄,使除数的最高位“9”对准结果显示器上的“4”,然后逆时针旋转动力曲柄,最多也只能旋转6圈,此时结果显示器显示“2901”,记转器显示“6”,便得到了62121÷987的计算结果“商6余2901”;第四,旋转滑板曲柄,使除数的最高位“9”对准结果显示器上的“3”,然后逆时针旋转动力曲柄,最多只能旋转2圈,此时结果显示器显示“927”,记转器显示“2”,便得到了2901÷987的计算结果“商2余927”。
⑥将每次运算所得结果列出来,便是654321÷987的最终结果“商662余927”。
3、部分功能详解及其进位过程
理论上讲,将几个阶梯滚轮装置(见图2)并排起来,便构成了一台莱氏计算器;但是,在实际操作层面上,却远比想象中的复杂:其关键在于如何处理进位问题,尤其是连续多次进位问题。帕斯卡加法器的进位原理,类似于我们现在日常使用的水表、电表的结构,低位齿轮旋转1圈后,会拨动左侧高位齿轮前进1齿,如此完成1次进位;其进位只能是低位齿轮逐级地推动高位齿轮的转动,不存在多个数位的齿轮同时转动的情况。
但是,莱氏计算器因为要进行乘除法运算,它必须能够使不同数位上的转轴、齿轮、阶梯滚轮等同时转动,并保证高位计算轴能够精确地接收到低位计算轴上的进位,并且还要保证相邻的计算轴在进位的时候不会发生冲突;这是莱布尼茨要克服的机械难题。
1)主要部件功能详解
我们在这里借用巴杜尔在《最后的珍品》中绘制的四幅图,对莱氏计算器的内部结构进行一些详细的说明。图3是整体功能结构图,图4是输入装置结构图,图5是计算装置结构图,图6是进位装置结构图。
图3中各部件的名称及作用(见图3)分别是:a. 底盘,承载计算器整体;b. 输入装置,位于计算器前半部分(见图4),是一个能够在螺纹中轴上左右移动的整体;c. 结果显示器,及时地显示运算结果;d. 计算装置,固定于计算器后半部分(见图5),是一个独立的整体。
图4中各部件的名称及作用分别是:e.输入旋钮,位于输入装置b上,一共有8个,上面刻有0~9十个数字,旋转它的时候就会通过底下的传动齿条使阶梯滚轮m产生位移,从而实现数字输入的功能;f.动力曲柄,是计算器进行计算的唯一动力来源,转动它的时候便进入计算状态;g.记转器,用于计算动力曲柄旋转的圈数,上面有对应着0~9十个数字的10个孔,可以用一个插销插入指定的孔中,以限定动力曲柄旋转的最大圈数;h.滑板曲柄,通过转动它,输入装置会在8个不同的位置间进行移动,用以完成对高位数或小数的计算;j.定位仪,用以确保输入装置移动到准确的位置上,否则传动曲柄f将会卡住;m.阶梯滚轮,阶梯状的齿牙位于圆柱体的一侧,齿牙之间的角度是22.5°,与输入转盘e底下的传动齿条相连,承载着输入结果,预备进入计算装置中进行计算;u.传动齿轮,传动曲柄f首先驱动紧靠其后的3个大的传动齿轮,然后再驱动更后面的8个传动齿轮,这8个传动齿轮再通过紧靠着它的小齿轮驱动阶梯滚轮,并同时驱动和它处于同一个轴上的末端的二角齿轮。
图5中各部件的名称及作用分别是:i.制动弹簧,保证齿轮旋转的时候保持一定的张力,保证计算的精确度;k.中间过渡轴,位于计数轴的中间,总共有15条,上面载有进位装置(见图6),在其前面和后面各有一个五角凹轮;l.五角垫圈,位于过度轴的最末端,属于进位装置的一部分,当它成倾斜状的时候,表示有进位需求,手动将其摆正之后才能最终完成进位;n.接收计数轮,与结果显示器c同处于计数轴上,与下面的阶梯滚轮相接,用以接收来自阶梯滚轮的数值。
2)进位装置部件功能详解
图6中各部件的名称及作用分别是:k.中间过渡轴;m.阶梯滚轮,当它的阶梯状的齿牙位于上方的时候,会与接收计数轮n相接,从而实现数值的传送;n.接收计数轮,它与结果显示器同处计数轴上,两者的转动具有一致性;u.传动齿轮,它会通过与它相接的小齿轮驱动阶梯滚轮m旋转;v.传动齿条,与数字输入转盘e下面的齿轮相接,通过轴与阶梯滚轮相连,当旋转输入转盘e的时候,它会拉动阶梯滚轮做前后位移;o.单齿轮,位于计数轴的末端,拥有一个凸齿,在计数轴的带动下,每旋转一圈就会推动中间过渡轴k末端的齿轮旋转一个齿格,并使得中间过渡轴k旋转18°;s.前置五角凹轮,有五个凹陷的角,各自成72°,在没有进位需求的时候底边处于水平状态,如果单齿轮o推动了中间过渡轴k的转动,那么这个前置五角凹轮也会偏转18°;t.二角凹轮,它与传动齿轮u共用一个轴,位于轴的末端,在没有进位需求的时候,它不会与上面的前置五角凹轮相交,当有进位需求的时候,即当前置五角凹轮发生偏转的时候,它就会推动前置五角凹轮旋转54°;p. 末端五角凹轮,它与前置五角凹轮共用一个轴,当前置五角凹轮被二角凹轮推动54°之后,它也会发生同样的旋转,并同时推动与其相接的左侧的小型十角齿轮r旋转一个齿格,从而完成进位;r.小型十角齿轮,它位于计数轴上,用于接受来自右侧的后置五角凹轮的进位需求。
3)单次进位与多次连续进位
莱布尼茨的计算器,有两种进位机制:单次进位和多次连续进位。单次进位比较简单和顺利。例如,如果要计算9 3,机器运作的整个过程将是这样的:首先,将个位数上的数字输入转盘e向右旋转到刻度3的位置,这个时候转盘就会通过下面的传动齿条v使得阶梯滚轮m发生位移;其次,向右旋转传动曲柄f,它通过传动齿轮u推动阶梯滚轮向左旋转;第三,阶梯滚轮旋转到上方的时候,与个位数上的接收计数轮n相接,使得n向右转动3个齿格,并使得个位数上的结果显示器c从数值9变为数值2;第四,个位数上的单齿轮o推动它左侧的中间过渡轴k末端的齿轮向左旋转18°;第五,传动曲柄f继续向右旋转,二角凹轮t推动前置五角凹轮s向左旋转54°;第六,后置五角凹轮也向左旋转54°,并同时推动左侧的十位数计数轴上小型十角齿轮r向右旋转一个齿格。最后,十位数上的结果显示器c因为向右旋转了一个齿格,便从数字0变成了1,至此,完成了计算的全过程,8个结果显示器上的结果是00000012。
但是,还有另外一种情况,那就是当多次连续进位发生的时候,这是乘法运算中经常遇到的,也是莱布尼茨需要解决的一个难题,同时也是他的进位装置能够巧妙地解决的。例如,如果要计算99 3,则需要完成两次进位,其运算的整个过程是这样的:首先,个位数上的进位过程与上面的过程完全一样,完成进位之后,个位数的结果显示器c变成了2,十位数上的结果显示器c变成了0;其次,十位数所在的计数轴的末端的小型十角齿轮r,会推动其左侧的中间过渡轴k向左旋转18°,但是由于此时传动曲柄f已经不再旋转,二角凹轮也不会再旋转,进位过程也就到此为止;最后,不得不手动地将十位数与百位数之间的中间过渡轴k后面的五角垫圈向左旋转到水平位置,并同时推动其左侧的百位数计数轴向右转动一个齿格,由此完成进位的整个过程,八个结果显示器c上的结果是00000102。因此,在使用莱氏计算器的过程中,当计算完成之后,还需要检查末端的五角垫圈,如果有倾斜的,需要手动将其向左旋转(从计算器后面看是向右旋转)至水平位置,之后才会得到最终结果。
可以说,相对于莱布尼茨毕生所追求的“计算过程完全机械自动化”这一设计理念来说,在多次进位时仍然需要手动操作,是莱氏计算器的唯一弊病。为改进这一弊端,莱布尼茨耗费了大量精力和财力,但直至莱布尼茨去世,这一弊病仍未能克服。
4、结语与启示以上分析,虽已相当细致,甚至在个别地方略显冗繁,但也只是对莱氏计算器进行了粗略地讲解,足以见得莱氏计算器的复杂程度和设计难度;即使是在机械制造水平非常发达的今天,要复制这样一台计算器也是一件十分具有挑战性的工作。
但是,这种细致的分析,是一项基础性的工作,能够为学界的一些争论提供有力的参考。比如,有人猜测莱氏计算器是在帕斯卡计算器的基础上改进而成的,这显然是错误的猜测,只要对两款计算器的内部结构稍一对比,便能发现两者在设计理念、设计方法、复杂程度等方面相差悬殊,莱氏计算器相对于帕斯卡加法器而言几乎取得了革命性的突破。
再如,目前学界一般认为莱氏计算器的核心部件是阶梯滚轮,但是经过仔细分析不难发现,阶梯滚轮虽然非常关键,但是最复杂的技术难题是如何处理进位问题,机器各部件之间的系统性关联也是莱布尼茨的重要创新,这些共同推动了机械计算器的发展。
特别需要注意的是,莱布尼茨并不是一次性地完成了计算器的研制,而是终其一生都在研制和改进他的计算器,这种技术实践活动势必会对他的思想造成一定的影响,莱布尼茨自己也曾多次强调他的组合思想、计算思想与计算器的关联性,这将是我们今后继续探讨的一个课题。
目前,在德国已经有科普教育公司成功地通过乐高积木等简单的工具,模拟了莱氏计算器的设计理念;在一些大学的科学教育课堂上,已有学生团队使用塑料材质制作了简单的莱氏计算器。研究莱氏计算器,对于我国的科技史研究、科技博物馆教育、STEM教育和科技传播等领域均会有所帮助。
作者:张涛,华南师范大学科学技术与社会研究院讲师,北京师范大学中德国际莱布尼茨研究中心兼职研究员,德国汉诺威莱布尼茨大学莱布尼茨研究中心访问学者。
本文原载于《自然科学博物馆研究》2019年第6期,第75-83页,经授权转载自微信公众号“清华大学科学博物馆”。