分享

帕斯卡算术器的运算原理 03

 科学羊 2023-09-12 发布于广东
本系列文章预计会有10个章节,这套文献会系统讲述计算机科学本身,这里是第一季第03篇
本篇较长,本文预计阅读10min--

如果让你用机械设计一款可以实现一个简单3位数以内的加减计算的装置,你有想法吗?先思考下!

其实这个问题我们从未思考过,因为我们所处的社会,随手拿个计算器、算盘、草稿纸上算都能得出结果。但你会发现,一两个这样的计算不会劳累,如果是1000个,甚至1W个这样的重复计算岂不是很累。当然,现代的方法是用计算机写个程序就可以自动计算实现。

但是在那个还没有电力、蒸汽动力的社会,如何来实现。对古人来讲不仅是一场技术挑战,更是一种思维竞争。

我们先来理一理做这样一台机器要怎么实现?

首先,需要动力吧,从最简单入手的话,人工就是一个很好的动力来源。人可以通过身体做功转化机械能,至于如何转化,要看具体的机械装置。

其次,需要一个能将动力转化为计算的装置... 当然,这个才是最难实现的。

艾伦·麦席森·图灵

好,我们先停下来看看在上个世纪30年代中期,图灵是怎么思考关于计算这个问题的,他有三个灵魂拷问。

第一个问题,世界上是否所有数学问题都有明确的答案?
第二个问题,如果有明确的答案,是否可以通过有限步骤的计算得到答案?
第三个问题才是,对于那些有可能在有限步骤计算出来的数学问题,能否有一种假想的机械,让它不断运动,最后当机器停下来的时候,那个数学问题就解决了?

其实,以上这三个问题已经升华到一种非常深的哲学层面,以至于后来演化为:图灵模型。这个后期再谈,不过我们希望通过这三个问题来激发我们再一次对计算的认识。

接下来,我们看看计算本质,看个案例:


从上面这个图来看,不难发现对于加法的计算,我们只需要将每个位制的数字进行相加即可,关键的问题就是考虑如何进位问题。

当然这个问题简单,请看下面这个机构,这个机构是契克卡德的单齿进位机构。可以看出高位齿轮有一条长杆会在齿轮转动一周的时候将低位齿轮进行一次传动,这个简单的操作,就可以实现一个进位。


有了以上思考和认知,我们再来仔细学习下帕斯卡是如何设计这款计算器的。

01 帕斯卡计算器


见上图,从外表看,机器的上半部分是开着6个小窗口的读数区,每个区域都有一个数学显示,而下半部分则是6个紧挨着的置数旋钮。可以看得出,其实盒子内部的示数轮与置数轮是联动的。

下面的置数旋钮的造型也是很特别,十根辐条从中心发散,像个车轱辘,制动的时候还需要用一支硬笔戳在辐条之间的空档,顺时针拨动,直至撞上底部那根类似留声机唱针的固定小棍。这种置数方式像极了老式的转盘电话机。

老式电话

02 进位机构

如何进行计算?

帕斯卡起初的设计与契克卡德的单齿进位机构类似(尽管他并不知道计算钟的存在),是一种长齿进位机构——齿轮的10个齿中有一个齿比另外9齿稍长一些,正好可以与旁边代表更高数位的齿轮啮合,正转实现加法的进位,反转实现减法的借位。

我们看看动图 28 +35 = 63,是怎么实现的?

动图太大无法播放,大家请看解说

解说:随便找一个笔杆,先将高位拨动到2,然后再将低位拨动到8,再将高位+3,也就是拨动到5,然后再将低位+5,也就是 8+5 = 13,所以低位需要增加5个数,当低位从8转动到下一个3的时候,高位会通过进位机构自动进一,就是将之前的5变为6。所以最后的结果就是63。

说实话,我感觉好像并没有简化计算,反而手算会更快。但是我们不必纠结这个问题。古人能想到这一点已经很厉害了。当时巴贝奇做出来的差分机,人称“会思考的机器”。

不过这类进位机构有着一个很大的缺陷——齿轮传动的动力来自人手。同时进行一两个进位还好,若遇上更多位的连续进位就很麻烦,比如999999+1,从最低位一直进到最高位,长齿全部与下一位齿轮啮合,齿轮旋转起来相当吃力。你说你力气大,照样能转得动旋钮没问题,可齿轮本身却不一定能承受住这么大的力,搞不好容易断裂。

为了解决这一缺陷,帕斯卡尝试了各种改进方法,却发现再精妙的齿轮设计都无法绕开连续进位的魔咒。这个问题不解决,制造机械式计算机就是扯淡。这位天才思前想后,最后破天荒地想到了借助重力——他设计了一种叫sautoir的装置,sautoir来自法语sauter,意为「跳」。

低位齿轮在旋转过程中将sautoir抬起,每当转过9回到0时,sautoir便掉落,其上的爪子推动高位齿轮转动36°,整个过程sautoir就像荡秋千一样从一个齿轮「跳」到另一个齿轮。上一个进位与下一个进位分离,连续进位时产生多米诺骨效应。


其实刚开始我还没有理解这个装置究竟解决了什么问题,后来我才意识到,其实就是省力,通过自动装置来省去上面我们讲过的普通进位机构带来的麻烦。

往后的一百多年里,许多机械师都对这种前无古人后无来者的绝妙设计赞不绝口。帕斯卡本人对自己的发明更是相当满意,他夸张道:有了sautoir,机器做到一万位数,用起来也和两位数没差。

然而,连续进位是没问题了,sautoir却有着一个致命缺陷——不能反转,这就给使用前的置零制造了麻烦,需要从个位开始依次将每一位数转到9,而后在个位上加1以产生连续进位,完成所有位的置零。一万位的机器做出来恐怕也没人敢用吧!

不能反转就以为不能做减法,那帕斯卡如何解决计算减法这个问题呢?继续往下看。

03 如何进行减法计算?

上面我们所讲的基本都是加法计算,我们再来看看如何实现减法。

怎么实现减法呢?这仍然难不倒我们的帕斯卡——既然只能做加法,那有没有一种方法可以将减法转换成加法呢?结果他还真想出了一种用加法代替减法的方案,正是计算机中沿用至今的补码。

十进制下的补码是补九码(9's complement):对于一位数,1的补九码就是8,2的补九码是7,3的补码是6,以此类推,原数和补码之和为9即可。在6位数中,a的补九码就是6个9减去a。设6位数的补九运算为cp(),用公式表示就是:


利用简单的数学技巧(结合律),便可将减法运算转换为有补码参与的加法运算:


所以:两数之差的补码,等价于被减数的补码与减数之和。

可能你没注意,其实帕斯卡计算器上面的栏还有一层被挡住的,我们打开看看。


帕斯卡在示数轮上标了两排数字,一排是原数0~9,,一排是一一相应的补码,补码在上,原数在下。不论转到哪个数字,其补码也一同出现。

盖上盖板就是这样

打开盖板,里头的示数轮长这样

做加法时挡住补码露出原数,做减法时反之,但任何置数都是对下排的置数。我们来看个案例,比如计算1998 - 886 = 1112  是如何计算的。

首先,先置位
补码的补码就是原数。输入被减数1998的补码998001,上排自动显示为1998:
给998001加上减数886,下排得998887,上排自动显示为001112,便是最终结果:
整个过程用户看不到下面一排数字,其实玄机就在里头,原理非常简单,上下排互为补码,09一轮回,却很有意思。

总结:

  1. 前人的思考,我们的阶梯。回归到古人时代,我们不一定真正能够解决这些工程问题,我觉得帕斯卡的能之所以有所成就,关键在于,第一:他真正懂数学,从补码的思想来看,他对数学的运算技也有一定的实力。第二:知行合一,能够亲自动手敢于创作。他的精神值得我们借鉴和学习;

  2. 我查过很多关于写帕斯卡本人和其研究的文章,其实很少很少,可能他的创作放在历史长河里面还不及牛顿等人的一个页码,但是所有最让人值得尊敬的都是首批潜心的开发者,从0到1,实属不易。在此我以本篇文章来表达对他的敬意;

  3. 看清事物的本质,有利于提升智慧。如果你对一样事物研究的越透彻,你就越能在此基础上进行创作。实现自我的自由度也就越大;


好,今天就先这样啦~

Masir - 2023/01/12

于 东莞

祝幸福~


参考文献:
[1].帕斯卡算术机——数学天才的十余年匠心 - 简书 (jianshu.com)
[2].https://zh./wiki/%E5%B8%83%E8%8E%B1%E5%85%B9%C2%B7%E5%B8%95%E6%96%AF%E5%8D%A1
[3].How the Pascaline Works - YouTube

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多