2863
需用时 05:43
中国人的老祖宗打算盘,欧洲人的老祖宗…打"碟" ?

手工计算时代

菜市场买菜和丈量星球之间的距离有什么共同点?它们都要用到数字的计算。

现在人们当然已经习惯使用电子设备,免去了繁琐和高失误率的计算过程,但在计算器没被发明之间,人工计算是一个逃不开的问题。当然,即使在科技不发达的手工计算时代,也总有聪明人想出办法,给自己一个偷懒的方法。

手工计算时期的计算工具以辅助性为主。最早的辅助性工具包括石子、结绳、算筹等,这些工具通过使用现成的物品记录计算过程,帮助人们记忆、计算。但很快,这种记录形式的辅助工具就已经满足不了人们日益增长的数据计算需求了,因此,又出现了算盘、纳皮尔棒这样的辅助计算工具。

算盘是手工计算时代的计算器之王,大家也都很熟悉,就不多做介绍了,今天主要讲讲纳皮尔棒

从18世纪流传下来的一套纳皮尔棒。图片来源:Stephencdickson|Wikipedia

纳皮尔棒由16世纪的苏格兰数学家、物理学家、天文学家约翰·纳皮尔(John Napier)发明的,主要用来计算乘法与除法。它的巧妙之处在实现了乘除法到加减法之间的转换。

加法的核心思想是两数相加,而乘法是基于加法的原理,实现多个相同数的相加。在计算乘法时,我们可以回归到加法上,实现运算的结合。比如12x43,可以认为是40个12与3个12的和,即12x43=12x40+12x3,于是,一个乘法问题就转化为两个数相加的问题。

纳皮尔棒由一根根圆柱小棒组成,每根小棒代表一个数a,小棒从上到下记录着一串数字,分别是该数a与1~9这九个数字的乘积结果,这个结果由两个数字组成,分别是乘积的十位和个位,用斜杠线划分。把代表1到9的九根纳皮尔棒排列起来,其实也就是是我们熟悉的乘法表。

纳皮尔棒示意图,每一列表示一根小棒。图片来源:Wikipedia

纳皮尔棒是如何使用的呢?还是以12x43为例,首先按顺序取出1和2两根纳皮尔棒,组成第一个乘数,然后再根据第二个乘数“43”框出这两根纳皮尔棒的第三行和第四行。

纳皮尔棒计算12*43

算式已经列好,接着就要计算结果了。

前面我们讨论过,12x43=12x40+12x3,而根据纳皮尔棒,我们现在能直接看到12x3=36和12x4=48,而纳皮尔棒得到的48与真实加数480少了十倍关系,因此,将36、48错位相加,计算36、480这两个数的和,就得到12x43的结果516。

纳皮尔棒把乘除法转为加减法,一定程度上简化了手工计算时代的运算过程,因此,16世纪及之后,纳皮尔棒在欧洲得到广泛的应用和推广。

从手工到机械计算器——帕斯卡计算器

算筹、算盘以及纳皮尔棒等工具的出现减轻了运算过程的繁琐程度,但从本质上看,这些都是手工计算的辅助工具,只起到帮助作用却没能代替人们进行复杂的数字计算。所以随着机械生产的不断发展,人们自然就会开始考虑制造机械计算器以取代手工计算,既能减轻手工计算的负担,又能减少手动计算的失误。

17世纪的欧洲就处于这样一个使用辅助工具处理计算,而机械制造业也不断发展的时代。这个时代,有一个叫布莱兹‧帕斯卡(Blaise Pascal)的年轻人,花了十年的时间研究并设计出了对后世影响极大的帕斯卡计算器。

从1639年开始,帕斯卡的父亲成为了一名税务官,每天都需要无休止地、重复地计算税务收支。当时的计算工具十分有限,最多只有纳皮尔棒、乘法表、三角函数表之类的辅助工具,所以帕斯卡父亲在进行数值庞大的税务计算时既辛苦又容易出错。为了减轻父亲的计算负担,帕斯卡就想制造一种可以自动进行加减法运算的机械装置。于是1642年,帕斯卡计算器问世了。

帕斯卡计算器。图片来源:Wikipedia

从外表上看,帕斯卡计算器由两部分组成,下面一排轮轴式表盘是计算器的输入部分,而上面一排数字是结果输出部分。使用时,先在输入表盘对应的位置旋转相应的格数,如要输入数字123就分别在百位、十位、个位旋转1、2、3格,这时,机器上面的显示部分会显示123这个数字;再在表盘各位输入需要相加的数字,比如还是123,这时输出部分能直接显示相加结果246,方便快捷。

从内部结构看,帕斯卡计算器是纯机械结构的计算机器,也可分为两部分:内置装置和进位装置


内置装置机械结构(上)和进位装置机械结构(下)图片来源:Wikipedia

内置装置即输入部分到输出显示部分的内置齿轮传送结构。输入表盘Q的一个圆周表示0~9十个数字,一个齿轮S上有十个齿槽。当数字加1,也就是输入表盘转动一格时,齿轮也随之转动一个槽,并通过机械传送使输出显示部分D也相应跳动一个数字,简单高效。

进位装置是不同输入表盘之间的机械连接部分,当加法运算出现向前进位时,这部分就派上用场了。当右边的低位输入表盘转动一整圈,即计数到10后,低位盘就会推动中间的进位杠杆,进而带动高位齿轮转动一格,同时低位齿轮回到初始原点。这样,就实现了计算器的高位进位和低位清零。

内置装置和进位装置两部分的设计,实现了从输入到输出、从低位到高位的计算器机械结构传动,能成功完成包含进位的数字机械相加。但是这里的杠杆传动是单向的,转盘不能逆时针转动,减法运算该怎么实现的呢?

用加法的思想计算减法

帕斯卡计算器最主要的创新点,也是最为人称道的构思,在于通过使用“补九码”实现加减运算之间的转化。这个加减转化思想也成为了后来电子计算机计算减法最重要的方法,一直沿用到现在。

补九码就是能使一个数字的每一位数都“补”到9的数字,比如1的补九码是8,11的补九码是88。我们用符号CP(a)表示数字a的补九码,则CP(0)= 9 - 0= 9。

对于一个n位数a,它的补九码是:

,9…9表示数字n位9

那么(a-b)的补九码则是:

而一个数字的补九码的补九码就是它自己,所以:

于是我们惊喜地发现,算两次补九码运算后,减法就变成了加法,也就是说,可以通过加法操作得到两个数相减结果!这样一来,只要在表盘上同时显示操作数和它的补九码,便可以完成数字的减法操作——这就是帕斯卡减法运算的思路。

仔细观察计算器,我们发现输出部分其实会显示两排数字,其中一排被一个可以滑动的长方形挡板挡住了,这两排数字分别表示数据原码和数据补九码,通过滑动挡板可以选择显示哪个数。图片来源:Wikipedia

举一个例子,比如我们要计算54321-12345。

帕斯卡计算器的两个结果显示区示意图,分别体现了数据原码(黄色数字)和数据补九码(灰色数字)。

首先,在输入表盘上输入数字54321,从图中的上半部分可以看到,表盘显示了两个数字,分别是原数54321和它的补九码45678。

遮住原数字部分,只看补九码45678,用补九码45678加上减数12345,即45678+12345=58023。可以看到,58023出现在计算结果的灰色框中,反过来,再看58023的补九码41976,发现54321-12345=41976!正如前面所说,通过两次求补九码的操作,可以把两数相减转为两数相加。为了避免原操作数和补九码混淆,帕斯卡利用移动挡板遮挡计算时不需要观察的数据,省得两个数据同时出现看得迷糊。

帕斯卡计算器的影响

用机械传动实现数字相加,用补九码的方式实现数字相减,帕斯卡计算器巧妙且开创性的设计,解决了当时社会上只能用辅助工具帮助计算的问题,奠定了它在计算器发展史上坚实的地位,使手动计算到机械计算跨进了一大步。

不过可惜的是,帕斯卡设计的计算器在当时那个时代没有得到广泛的应用,主要原因在于帕斯卡计算器制造的精细程度和复杂程度,使得机器无法大量投入生产且价格昂贵,只能成为欧洲有钱人展示其地位的象征。不过,这也从另一方面反映了帕斯卡计算器跨时代的设计和成就。在巴黎工艺美术博物馆和德国德累斯顿的茨温格博物馆,至今展示着帕斯卡最早设计创造的两台计算器。

帕斯卡计算器的机械设计思想,推动了后来机械计算器的设计和发展。德国数学家莱布尼兹就是受了帕斯卡计算器的启发,又苦恼于帕斯卡计算器只能计算加减不能运算乘除,于是扩展了帕斯卡计算器的功能,设计发明了可以进行四则运算的莱布尼兹机械计算器,并进一步带起了后续计算器设计的浪潮。

另一方面,帕斯卡的补码思想,一直影响着后续的计算器运算思维。1851年,托马斯成功地将他设计的机械计算器arithmometer在商业上实现推广,而arithmometer使用的减法原理,就是帕斯卡的补九码思想。直到今天,补九码仍是电子计算机中数字运算的重要思想。现代电子计算机中的原码、反码、补码的方法,就是借鉴了帕斯卡开创性的补九码思想,解决计算过程中数字加减法之间的转化问题。我们这些用着电子计算机、享受高速计算带来的生活便利的后人们,实在应该真诚地感谢他为科技进步做出的贡献。(编辑:婉珺)

The End

发布于2018-01-25, 本文版权属于果壳网(guokr.com),禁止转载。如有需要,请联系果壳

举报这篇文章

秦曾昌

英国布里斯托大学 (University of Bristol) 计算机系硕士, 布里斯托大学工程数学系的人工智能博士。

pic

    林思思

    北京航空航天大学自动化学院,硕士生。

    pic