☞ 欢迎来到神奇的01世界 ☜

在步进计算器诞生之后的两百多年中,机械计算之曲始终在莱布尼茨定好的基调上演奏。不难发现,两百年中的制造工艺在不断进步,机器的可靠性也不断提高,而计算原理却始终没有改进。尽管各路“莱系”计算器都宣称具备四则运算的能力,其实乘除法的实现靠的是重复加减,使用者总是需要旋转多圈手柄,以“伪造”乘除运算的过程。严格来讲,“莱系”计算器都不是真正的四则计算器,他们只具备加减能力,因此常被称为加法机(adding machine)。

那么,还有没有靠机械结构实现自动乘除的可能呢?有的,而且不止一个人交出了答卷。

1834年,意大利人路易基·托尔基(Luigi Torchi)发明了世界上第一台按键式计算器,同时也是第一台可以直接进行乘法运算的计算器。可惜的是,有关这台机器的史料存世甚少。正经传世的四则计算器设计分别出自美国人埃德蒙·巴伯(Edmund Barbour)、西班牙人雷蒙·韦拉(Ramón Verea)和法国人莱昂·伯利(León Bollée)之手,他们先后于1872年、1878年和1889年取得发明专利。

而第一个让四则计算器走向市场的,是一位生活在德国慕尼黑的瑞士工程师奥托·施泰格尔(Otto Steiger)。他改进了莱昂·伯利的设计,并于1892年取得德国专利,随后在法国、瑞士、加拿大和美国也陆续取得了专利。在苏黎世工程师汉斯·W·埃格利(Hans W. Egli)的帮助下,1893年,机器开始量化生产,他们为它起了个霸气而吉利的名字——“百万富翁”(The Millionaire)。

组成结构

“百万富翁”乍看起来像“高配版”算术仪,它有着和算术仪一样的置数滑钮和计算手柄。

百万富翁组成结构(原图来自维基百科)

“百万富翁”封装于木盒之中(少数型号是金属盒),打开盒盖可以看到,机身分上下两大部分,上半部分又分为左、中、右三块功能区。左上区域是一根小角度摆动的手柄,称为乘数手柄,其内部隐藏着机械乘法的奥秘;中上区域是与算术仪类似的置数滑钮(后续有少数型号改装为按键),底部是与之一一对应的示数窗口;右上区域为选择运算模式的滑钮(A、M、D、S分别对应加、乘、除、减)和计算手柄,在任何模式下,计算手柄都顺时针旋转(后续有部分型号用电动马达代替了计算手柄);下半部分是封装在机器内部的可动部分,主要显示计算结果和手柄旋转圈数,每次计算前都需将可动部分移至最右侧,并向右滑动清零滑钮对其实现清零,清零滑钮在弹簧的作用下会自动回到左侧。

使用方法

加法运算

  1. 模式选择为A。
  2. 通过置数滑钮置入被加数,旋转计算手柄,被加数就显示到了结果示数窗口。
  3. 通过置数滑钮置入加数,旋转计算手柄,加数就累加到了被加数上,此时结果示数窗口即为最终结果。

减法运算

减法的步骤与加法一样。

  1. 模式选择为S。
  2. 通过置数滑钮置入被减数,旋转计算手柄,被减数就显示到了结果示数窗口。
  3. 通过置数滑钮置入减数,旋转计算手柄,减数就从被减数上扣除,此时结果示数窗口即为最终结果。

乘法运算

“莱系”计算器在进行乘法运算时,需要分别计算被乘数与乘数每一位的部分积,“百万富翁”也是如此。所不同的是,前者在计算被乘数与乘数某一位的部分积时,该位数字是多少,计算手柄就要旋转多少圈,而“百万富翁”始终只需旋转1圈。以1024×128为例:

  1. 模式选择为M。
  2. 通过置数滑钮置入被乘数1024。
  3. 旋转乘数手柄,指向乘数128最高位上的数字1,旋转计算手柄,被乘数1024与乘数最高位1所产生的部分积102400便显示到结果示数窗口。同时,在计算手柄的旋转过程中,可动部分自动左移一位,以备累加下一步被乘数与乘数次高位的乘积。
  4. 旋转乘数手柄,指向乘数128次高位上的数字2,旋转计算手柄,被乘数1024与乘数次高位2所产生的部分积20480便累加结果示数上,示数为122880。可动部分自动左移一位。
  5. 以此类推,直至乘数个位——此例中,这一步已经到达。旋转乘数手柄,指向乘数128个位上的数字8,旋转计算手柄,被乘数1024与乘数个位8所产生的部分积8192便累加结果示数上,示数为131072,即1024×128的最终结果。

除法运算

以131072÷1024为例:

  1. 模式选择为D。
  2. 通过置数滑钮置入被除数131072,旋转计算手柄,131072进入结果示数窗口。
  3. 通过置数滑钮置入除数1024。
  4. 比照除数和被除数的高4位,通过心算估算商的最高位为1,将乘数手柄指向1。
  5. 旋转计算手柄,如果估算准确,结果示数被扣去除数1024与商最高位1的部分积102400,示数余28672。如果估算偏高了,被除数不够扣,机器就会响铃警报;如果估算偏低了,使用者会在下一步估算时发现。同时,在计算手柄的旋转过程中,可动部分自动左移一位。
  6. 比照除数和28672的高4位,估算商的次高位为2,将乘数手柄指向1。
  7. 旋转计算手柄,结果示数被扣去除数1024与商次高位2的部分积20480,示数余8192。可动部分自动左移一位。
  8. 以此类推,直至结果示数小于除数,此时的结果示数即为余数。此例中,商的下一位估算为8,余数为0,商即128。

可见,这一除法过程很大程度上依赖于使用者的心算,“百万富翁”仅作为一件辅助工具,帮助使用者快速验证自己的估算。考虑到部分用户心算能力有限,盒盖的内侧贴着一张1~9分别与1~99的乘积表,并附有两个可上下移动的读数游标。

乘法原理

从上文可知,在“百万富翁”支持的范围内,多位数与任何一位数的相乘都只需要旋转一圈计算手柄。你可能绞尽脑汁也想不到,这一过程的实现靠的不是计算,而是“查表”。机器内部,乘数手柄的下方,竟藏着一“张”纯机械的“九九乘法表”!

在一块竖直放置的底座上,固定着17片呈阶梯齿状的金属片,每片厚约2mm,片间缝隙约1.5mm。每片从上至下分为9阶,阶高4mm,阶长为4mm的整数倍,从短到长依次有0mm、4mm、……32mm和36mm等10种阶长,分别表示数字0~9。

“百万富翁”中的“乘法表”装置(图片来自「The "Millionaire" Calculating Machine - Technical Description」)

为便于观察,我们暂时将金属片的间距拉大:

片距放大之后的“乘法表”装置(图/S7)

由远及近,第1片从上至下9阶分别代表1和1~9的乘积;第2、3片共18阶从上至下分别代表2和1~9的乘积,其中第2片表示十位,第3片表示个位;以此类推,第16、17片上18阶分别代表9和1~9的乘积,其中第16片表示十位,第17片表示个位。各片上各阶的单位长度(即其所代表的数字)。

第1片 第2片 第3片 第4片 第5片 第6片 第7片 第8片 第9片 第10片 第11片 第12片 第13片 第14片 第15片 第16片 第17片
第1阶 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9
第2阶 2 0 4 0 6 0 8 1 0 1 2 1 4 1 6 1 8
第3阶 3 0 6 0 9 1 2 1 5 1 8 2 1 2 4 2 7
第4阶 4 0 8 1 2 1 6 2 0 2 4 2 8 3 2 3 6
第5阶 5 1 0 1 5 2 0 2 5 3 0 3 5 4 0 4 5
第6阶 6 1 2 1 8 2 4 3 0 3 6 4 2 4 8 5 4
第7阶 7 1 4 2 1 2 8 3 5 4 2 4 9 5 6 6 3
第8阶 8 1 6 2 4 3 2 4 0 4 8 5 6 6 4 7 2
第9阶 9 1 8 2 7 3 6 4 5 5 4 6 3 7 2 8 1

从理论上的完整性讲,第1片前面应该也有一片表示十位的金属片,只不过1和1~9的乘积都是个位数,这一片上所有阶长都是0,便自然被省去了。

由于乘法表是纵横等效的,这一装置从上至下可以分为9层,每层有17阶,第1层对应1~9和1的乘积,第2层对应1~9和2的乘积、……第9层对应1~9和9的乘积。乘数手柄在0~9之间摆动,其实是在上下提沉整个“乘法表”装置,以使其某一层与右侧的9根传动齿条对齐。

“乘法表”装置与传动齿条(原图/S7)

旋转计算手柄,“乘法表”装置会向右撞击,与齿条对齐的那一层便将各齿条往右推移一段距离,各齿条的位移距离取决于“乘法表”该层与其相对的阶的长度。乘数手柄指向0时,整个“乘法表”装置位于齿条所在的水平面以下,后续的撞击就无法推动齿条产生位移。

每个置数滑钮下方都连着一个小齿轮,置数时滑动滑钮,小齿轮就与某一根齿条啮合。齿条被撞击时,小齿轮便旋转与齿条位移距离相应的角度,这一角度通过一系列齿轮传动最终体现到结果示数轮上。

从齿条位移到结果示数的齿轮传动结构(图片来自「The "Millionaire" Calculating Machine - Technical Description」)

旋转计算手柄一圈的过程中,共产生两次撞击,以下以乘数为2(即“乘法表”第2层与齿条对齐)作为示例呈现这一过程。

“乘法表”第2层与齿条对齐的正视图(图/S7)
  1. “乘法表”装置在水平面内平移至表示十位的8阶与第2~9根齿条一一对齐(如图2.57所示),向右撞击后向左恢复至原位;
“乘法表”十位阶与齿条对齐俯视图(原图/S7)
  1. 由于“乘法表”第2层十位阶的单位长度依次为0、0、0、1、1、1、1、1,故在撞击中,前3根齿条没有碰触“乘法表”而不发生位移,后5根齿条则均右平移1个单位距离后,在弹簧的作用下向左恢复至原位;
在“乘法表”第2层十位阶的撞击下,齿条的位移状态俯视图(图/S7)
  1. 可动部分左移一位;
  2. “乘法表”装置在水平面内平移至表示个位的9阶与9根齿条一一对齐,向右撞击后向左恢复至原位;
“乘法表”个位阶与齿条对齐俯视图(图/S7)
  1. 9根齿条依次向右平移2、4、6、8、0、2、4、6、8个单位距离后,在弹簧的作用下向左恢复至原位。
在“乘法表”第2层个位阶的撞击下,齿条的位移状态俯视图(图/S7)

参考文献

  • Wikipedia. The Millionaire Calculator[EB/OL].
  • John Wolff. The "Millionaire" Calculating Machine - Technical Description[EB/OL].

百万富翁——真正的四则计算器相关推荐

  1. 设计一个简单的四则计算器

    c# using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; u ...

  2. 用工厂方法模式实现四则计算器

    用工厂方法模式实现四则计算器 结构类图 实例实现代码 步骤1: 创建抽象工厂类 zc32OperationFactory,定义具体工厂的公共接口 interface OperationFactory ...

  3. [前端漫谈] 做一个四则计算器

    0x000 概述 近期重新开始学习计算机基础方面的东西,比如计算机组成原理.网络原理.编译原理之类的东西,目前正好在学习编译原理,开始对这一块的东西感兴趣,但是理论的学习有点枯燥无味,决定换种方式,那 ...

  4. C语言:四则计算器(支持小数,括号和次方幂 组合输入计算)

    之前已经写过一个计算器,每次回顾都觉得很复杂,一直在考虑重新写一个 支持小数运算 存储数据改为了double类型 支持整数次方 运算中乘法可以用x或者*表示,两个都支持 平台visual 存储数据改为 ...

  5. 带括号的简单四则计算器(思路)

    二更,理完思路后自己用Java写了个最简单的计算器 https://blog.csdn.net/weixin_42324771/article/details/90144707 以下是原文 网上有很多 ...

  6. c语言遇到非法字符,98行的四则计算器.(支持括号)加入了非法字符的检测

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include double s2n(char **tem)//字符串转为数字 { double tem_s=ato ...

  7. c语言非法字符有哪些,98行的四则计算器.(支持括号)加入了非法字符的检测

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include double s2n(char **tem)//字符串转为数字 { double tem_s=ato ...

  8. c语言非法字符判别,98行的四则计算器.(支持括号)加入了非法字符的检测

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include double s2n(char **tem)//字符串转为数字 { double tem_s=ato ...

  9. c语言非法字符空格,98行的四则计算器.(支持括号)加入了非法字符的检测

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include double s2n(char **tem)//字符串转为数字 { double tem_s=ato ...

最新文章

  1. java前台传多个id用什么接收_前端js传多个id 到java后台的处理方式
  2. 好嗨哟~谷歌量子神经网络新进展揭秘
  3. 方案 mysql 优点_mysql高可用方案分析
  4. C++:39---继承中构造函数、析构函数的关系
  5. 开课吧课堂之Super的第2种用法
  6. vue 第十天 (组件的基本使用)
  7. 闭环检测python_激光SLAM | 基于深度图的闭环检测
  8. mysql 30入门_mysql入门(三)
  9. Spring IOC源码笔记(一)
  10. NLPIR文本分析工具的功能和特色介绍
  11. latex 插入Python代码
  12. 常用的几个设计心理学
  13. 新中大冲刺科创板:年营收2.84亿 拟募资5.57亿
  14. 可视化工具Netron介绍
  15. 语中最美的十大经典爱情句子
  16. Macbook如何更换固态硬盘【亲测有效】
  17. word两个不同表格合并,防止自动调整
  18. 基于springboot+vue个人博客搭建
  19. (转)TSQL和PLSQL的区别
  20. linux环境下配置apache ,mysql,php,超简单

热门文章

  1. android电力监控平台,电力系统监控实验平台(网络型)
  2. python题库--简单
  3. SSH开发银联在线支付
  4. 史上最全的Uboot常用命令汇总(超全面!超详细!)收藏这一篇就够了
  5. 苹果iOS7 Beta 2版系统下载,ios7beta2固件下载
  6. 在unity中使用Newtonsoft.Json
  7. 《iOS防护01》ptrace防护
  8. win7修复计算机界面,用好Windows7自修复 系统崩溃无需重做
  9. 元宇宙赋能企业营销及品牌发展
  10. 【Python】Python生成个性二维码