Bootstrap

不用电的计算机(一)

转载请注明出处:https://www.cnblogs.com/morningli/p/15895939.html  
 
  文艺复兴时期,随着科学和数学的发展,人们对算术运算的要求越来越高。为了更有效的节约时间和精力,更好的提高计算效率、精度和准确性,更多的消除人为的错误,简化重复的算术运算。机械计算机的思想孕育而生了。
 
达·芬奇(Leonardo di ser Piero da Vinci)的草图
 
  “文艺复兴三杰”之一的达·芬奇,在他的马德里手稿I(Codex Madrid I)描绘着一部齿轮装置机器的草图,这很可能是为了计算而设计的。图中的齿轮可能代表着一个数字:小齿轮为数字1,大齿轮为数字10,故有人将这部机器诠译为第一部机械计算机。乔治·蔡斯说:“机械计算机史的本质就用是数字轮和旋转装置记录数字和十进位值的故事”。 

图片来源于网络

图片来源于网络

  1967年,马德里手稿(Madrid Manuscripts)发现不久后,古亚特利博士(Dr. Guatelli )赴美国麻省理工学院(MIT:Massachusetts Institute of Technology)图书馆研究草图,他将此与包含有很多齿轮传输的大西洋手稿(Codex Atlanticus)相结合。1968年,古亚特利博士复制出类似的机器,现陈列在IBM展览馆。

图片来源于网络
 
契克卡德(Wilhelm Schickard)的计算钟(Rechenuhr
 
  1623年,德国科学家契克卡德制作出第一台通过操作齿轮转动进行六位以内加减乘除运算的机器(因机器上部附加一套圆柱型“纳皮尔算筹”(Napier's bones),该机器除了能运行加减运算,还能进行乘除运算。) 。它还设置了某种“溢出”机制的响铃,故称“计算钟”。但该机器并没有被保存至今,现在仅发现与该机器相关的3个文件---契克卡德给开普勒的两封信和带机械师说明的机器草图。
图片来源于网络

图片来源于网络 

图片来源于网络

 

  1960年,德国蒂宾根(tübingen)大学的哲学教授Bruno von Freytag Löringhoff,按照契克卡德手稿模拟复制了第一台契克卡德计算钟。该机器经改进后工作正常,除进行6位加减乘除运算外,数位溢出时还能响铃报错。Bruno von Freytag Löringhoff教授在原稿的基础上对机器额外增加了轮子和弹簧及设计了可能导致机器无法正常工作的单齿轮移动机制(carry mechanism)。
 
图片来源于网络
   乘法器部分其实就是简单地将乘法表印在圆筒的十个面上,机器顶部的旋钮分有10个刻度,可以将圆筒上代表0~9的任意一面转向使用者,依次旋转6个旋钮即可完成对被乘数的置数。横向有2~9八根挡板,可以左右平移,露出需要显示的乘积。以一张纪念邮票上的图案为例,被乘数为100722,乘以4,就移开标数4的那根挡板,露出100722各位数与4相乘的积:04、00、00、28、08、08,心算将其错位相加得到最终结果402888。

图片来源于网络

  加法器部分通过齿轮实现累加功能,6个旋钮同样分有10个刻度,旋转旋钮就可以置六位整数。需要往上加数时,从最右边的旋钮(表示个位)开始顺时针旋转对应格数。以计算721+901为例,,先将6个旋钮读数置为000721:

 

图片来源于网络

  随后最右边的(从左数第六个)旋钮顺时针旋转1格,示数变为000722:

图片来源于网络

  第五个旋钮不动,第四个旋钮旋转9格,此时该旋钮超过一圈,指向数字6,而代表百位的第三个旋钮自动旋转一格,指向数字1,最终结果即001622:

图片来源于网络

  这一过程最关键的就是通过齿轮传动实现的自动进位。Rechenuhr使用单齿进位机构,通过在齿轮轴上增加一个小齿实现齿轮之间的传动。加法器内部的6个齿轮各有10个齿,分别表示0~9,当齿轮从指向数字9的角度转动到0时,轴上突出的小齿将与旁边代表更高位数的齿轮啮合,带动其旋转一格(36°)。

  减法就是逆时针旋转加法器的旋钮,单齿进位机构同样可以完成减法中的借位操作。除法需要在被除数上一遍又一遍不断地减去除数,自己记录减了多少次、剩余多少,分别就是商和余数。

  由于乘法器单独只能做多位数与一位数的乘法,加法器通常还需要配合乘法器完成多位数相乘。被乘数先与乘数的个位相乘,乘积置入加法器;再与乘数十位数相乘,乘积后补1个0加入加法器;再与百位数相乘,乘积后补2个0加入加法器;以此类推,最终在加法器上得到结果。

 

帕斯卡计算机(Pascal's calculator or Pascaline)

 
 

布莱士·帕斯卡(Blaise Pascal )法国数学家、物理学家、哲学家、散文家,国际单位制中压强的单位帕斯卡即以其姓氏命名。

图片来源于网络

  世界上第一台机械计算机被认为是帕斯卡计算机(Pascal's calculator or Pascaline)。 主要原因有三:1、契克卡德计算钟虽比帕斯卡计算机早20多年设计出来,但它的资料在沉默300多年后,直到1957年弗朗茨·哈默博士(Dr. Franz Hammer)才宣布了这张不被重视的计算钟图纸并挑战了机械计算机发明者不是帕斯卡(Blaise Pascal)而是契克卡德的事实。2、帕斯卡计算机与契克卡德计算钟的不同,说明了帕斯卡是独立发明而非受契克卡德的影响而设计的。3、契克卡德计算钟若按草图与当时的技术相结合,这台计算钟是不能正常工作的。故第一台机械计算机仍被认为是帕斯卡计算机,而机械计算机的发明者则仍是帕斯卡。

   科学家帕斯卡利用了齿轮啮合原理制造了十进制加法器,当齿轮旋转一周,10个齿中最长的齿会和更高位数的齿轮啮合实现进位。同样的道理,反过来旋转则是减法计算。但这一类进位机构有着一个很大的缺陷——齿轮传动的动力来自人手。同时进行一两个进位还好,若遇上连续进位的情况,你可以想象,如果999999+1,从最低位一直进到最高位,进位齿全部与高位齿轮啮合,齿轮旋转起来相当吃力。于是,帕斯卡将装置改造成借助重力进位的一种高级齿轮形式sautoir。

图片来源于网络

  sautoir这词来自法语sauter(意为“跳”)。这种装置在执行进位时,先由低位齿轮将sautoir抬起,而后掉落,sautoir上的爪子推动高位齿轮转动36°,整个过程sautoir就像荡秋千一样从一个齿轮“跳”到另一个齿轮。这种只有天才才能设计出来的装置被以后一百多年的许多机械师所称赞,而帕斯卡本人对自己的发明就相当满意,他号称使用sautoir进位机构,哪怕机器有一千位、一万位,都可以正常工作。连续进位时用到了多米诺骨效应,但是由于sautoir装置的存在,齿轮不能反转,每次使用前必须将每一位(注意是每一位)的齿轮转到9,而后末位加1用连续进位完成置零。

  既然sautoir装置导致齿轮无法反转,那么减法该怎么办呢?帕斯卡开创性地引入了沿用至今的补码思想。十进制下使用补九码,对于一位数,1的补九码就是8,2的补九码是7,以此类推,原数和补码之和为9即可。在n位数中,a的补九码就是n个9减去a,可以有以下推导过程:

图片来源于网络

  也就是说,a-b的补码等于a的补码加上b,减法转换成了加法。

  Pascaline在显示数字的同时也显示着其所对应的补九码,每个轮子身上一周分别印着9~0和0~9两行数字,下面一行该位上的表示原数,上面一行表示补码。当轮子转到位置7时,补码2自然显示在上面。

图片来源于网络

  帕斯卡加了一块可以上下移动的挡板,在进行加法运算时,挡住表示补码的上面一排数,进行减法时就挡住下面一排原数。

图片来源于网络

  这里主要说一说减法怎么做,以计算150723 - 2053为例,置零后将挡板移到下面,露出上面表示补码的那排数字:

图片来源于网络

  输入被减数150723的补码849276,上排窗口显示的就是被减数150723:

图片来源于网络

  加上被减数2053,实际加到了在下排的补码849276上,此时上排窗口最终显示的就是减法结果148670:

图片来源于网络

  本文主要讲解了早期计算机的一些简单实现,下一篇文章会讲到《现代计算机真正的鼻祖——差分机》,敬请期待。另外我在找资料的过程中发现已经有前人涉及这个议题了,写的相当详细,大家感兴趣可以看一下《改变世界:计算机发展史趣谈》。不过计算机的物理实现不是我的侧重点,所以很多地方会点到为止,最终还是得尽快回归到现代计算机的软件发展上。

 

引用:

  • http://blog.sina.com.cn/s/blog_5d6c51170102xu4z.html
  • https://zhuanlan.zhihu.com/p/56268805
  • https://blog.csdn.net/weixin_34138585/article/details/118848591
  • https://www.jianshu.com/p/4f69217a58f8?t=123
  • https://v.qq.com/x/page/d0875gbwcxv.html

     

     

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。