第一章
原始算力,那些伟大的发明
手动式计算,算力工具的起源
对人类来说,最早也是最简单的计算方式就是用手指,人有两只手,共10个手指,这也是为什么我们习惯使用十进制计数法。用手指计数的方法虽然很简单,但是计算能力和范围有限,也无法保存计算结果。春秋时期,人们用长度、粗细都相近的小棍子,通过横竖不同的摆放方法,来表示1、2、3、4、5、6、7、8、9这9个数字,这就是“算筹”,也是人类社会中最早出现的“算力”。这些小棍子一般长13~14厘米,径粗0.2~0.3厘米,用竹子、兽骨和象牙等材料制成。据《孙子算经》记载,算筹记数法则是:“凡算之法,先识其位,一纵十横,百立千僵,千十相望,万百相当。”这句话指明了“位”在算数中的重要意义,也指明了算筹的使用规则:个位用纵式,十位用横式,百位用纵式,千位用横式,以此类推,遇零则置空,这样从右到左,纵横相间,就可以表示任意大的自然数了。《夏阳侯算经》中记载:“满六以上,五在上方。六不积算,五不单张。”这句话解释了个位数摆放方式,其中1~5分别以纵横方式排列相应数目的算筹来表示,6~9则用上面的算筹再加下面相应的算筹来表示。
算筹的出现,解决了数字的表示和保存问题。人们利用算筹可以实现基本的记数,但是对于数字的加减乘除等计算方式,需要消耗大量小棍子,这种靠摆放来计算的方式就显得力不从心了。不过这个问题难不倒勤劳聪慧的古代劳动人民,在元代以后,一种新的计算工具代替了算筹,成为历史上公认的最早大规模使用的计算工具,时至今日,这种工具依然出现在我们的日常生活中,它就是算盘。我们在日常生活中一定听过“三下五除二”“一推六二五”这种口诀,这些就是珠算口诀。
算盘是计算工具发展史上的一次重大变革,由最原始的算筹演变而来,并且在很长的一段时期这两种计算工具并存。关于算盘的历史起源众说纷纭,但在元代后期,算盘凭借其灵便、准确的优势取代了算筹,成为古代乃至近代社会主流的计算工具,并先后流传到日本、朝鲜及东南亚国家,后来又传入西方。我国著名科学家钱学森曾说过:“算盘的发明,并不比中国古代的四大发明逊色,在某种程度上来说,算盘对世界的贡献要远大于四大发明。”可见,这种起源于古代社会的基础“算力”,对人类社会不断向前发展产生了深远的影响和推动力。
此外,在西方历史上也曾出现过使用较为广泛的手动计算工具。1617年,英国数学家约翰·纳皮尔发明了纳皮尔乘除器,也称纳皮尔筹、纳皮尔计算尺,如图1—1所示。它由10根长条状的木棍组成,每根木棍上从上至下的每个方格内的数字都表示该木棍第一位数与该方格行号相乘的结果,例如第七根木棍第三个方格代表7乘以3的结果21。简单来说,这就是一张九九乘法表。举个例子,当我们需要计算589乘以8时,选择第五、第八和第九根木棍摆放,而后把目光放到第八行,以斜线为界对每一位进行相加,超过9则进位,下一位加1,其计算过程如图1—2所示。通过这样简化的方式人们可以实现多位数的乘法。
图1—1 纳皮尔筹
图1—2 纳皮尔筹计算过程
上面介绍的算筹、算盘和纳皮尔筹等都是手动式计算工具,是人类历史上发明的第一代“算力”工具。
机械作嫁衣,提升算力效率
通过算盘、算筹等手动式计算工具,人类可以完成简单的数字加减乘除,但是当面对数据或计算量较大的情况时,就力不从心了。随着人类历史的发展,生产力不断升级,机械工具逐渐渗透到人类的日常生活和劳作中,帮助人类完成灌溉和农耕等生产任务,同时聪明的先辈也将这种机械设备应用在计算上,来解决手动计算效率低下的问题。
在流体力学领域有一个非常著名的定律—帕斯卡定律,该定律是以伟大的物理学家、哲学家和概率论的创始人布莱瑟·帕斯卡的名字命名的。此外,帕斯卡还是一个数学天才。在孩童时期,他看着身为税务人员的父亲整日为大量的税务计算所苦,很想为父亲分担些压力。在19岁那年,帕斯卡发明了滚轮式加法器,也叫帕斯卡加法器。通过使用该工具进行加法运算,帕斯卡父亲的工作负担大大减轻了。这种加法器外形是一个长方体盒子,内部从右到左分布着5个定位齿轮,分别代表个、十、百、千、万“位”,使用时,人们利用钥匙旋紧发条来转动每个齿轮,顺时针拨动齿轮进行加法,逆时针拨动进行减法。为了解决进位的问题,帕斯卡采用了一种小爪子式的棘轮装置,当定位齿轮转动到9时棘爪逐渐升高,转动到0时棘爪跌落下来推动前一位的齿轮前进一格。这是人类历史上第一台机械式计算工具,其原理对后来的计算工具的发明产生了深远的影响。
帕斯卡发明加法器是建立在人脑对加法计算的理解之上的,他通过齿轮的转动来表示每一步的计算过程和最终结果,这相当于用机械装置来模拟人脑的思维过程。正是受此启发,1673年德国数学家莱布尼茨在帕斯卡加法器的基础上进行改进,使之实现乘法和除法的计算,名为“莱布尼茨乘法器”。该乘法器成为历史上第一台能进行四则运算的机械式计算器。当进行乘法运算时,人们首先需要通过置数按钮将第一个乘数输入乘法器,然后通过移位手柄调节位数,从低位开始,依次转动计算手柄,每位转动的手柄圈数为另一个乘数当前位数的值,在转动完最后一位的圈数之后,上方显示的结果示数即为两个乘数的积。对于每一位的乘法运算过程,每转一圈计算手柄,该位的齿轮将做一次加法运算(通过帕斯卡加法器原理实现),转动不同的圈数即完成多次加法运算,借此来实现乘法运算。后来,莱布尼茨率先在计算机的设计理念中提出了二进制的运算法则,为现代计算机的发展奠定了坚实的理论基础。
以上两种以齿轮、连杆组装的运算器在计算工具的发展史上拥有过一段时间的辉煌,同期也出现过不少类似的计算工具,但是这些计算工具本质上依然没有突破手动机械的框架,在功能、速度以及可靠性等方面仍然有很大的局限性。为解决这种限制,人们必须突破手动式操作的思维框架,通过标准化的输入信息和机械操控方式来提升计算效率。1804年,法国一位名叫约瑟夫·雅各的机械师发明了一种可编程的织布机,织布机通过读取穿孔卡片上的编码信息自动控制织布机的编织图案,这项发明引发了法国的纺织工业革命。尽管这并不是一台真正的计算机,但是它第一次使用穿孔卡片这种输入方式,这成为现代计算机发展过程中的重要一步。
在这种模式的启发下,19世纪初英国数学家查尔斯·巴贝奇发明了利用机器取代人工操作的工具,在英国工业革命兴起的浪潮中完成了诸多复杂的计算工作,推动了航海、天文等多个领域的蓬勃发展。这个工具就是赫赫有名的“巴贝奇差分机”。1822年,在英国政府的支持下,巴贝奇开始研制差分机,这是一台“会制表的机器”,内部有齿轮式的存贮库,每个齿轮可以存贮10个数,齿轮组成的阵列一共可以储存1 000个50位数。这种通过存贮库来存储数据的计算方式,是程序设计思想的萌芽,标志着计算工具从手动机械式进入自动机械的新时代。在差分机的基础上,巴贝奇又开始了分析机的研究。这种分析机由存储装置、运算装置和控制装置三部分组成,成为可编程计算机的设计蓝图,时至今日我们使用的计算机都遵循着这样的基本设计理念,可以说这种设计思路为现代计算机设计思想的发展奠定了基础。
帕斯卡加法器、莱布尼茨乘法器等机械式计算工具的出现,大大提升了“算力”工具的执行效率。