缘由
正文
我想试试看怎么能设计一台直接计算十进制乘法的机械装置,不用任何通电元器件。大家都在玩互联 的时候,我却退回到了机械,仅仅觉得好玩。
我们还是先从一个简单的问题开始:
- 计算机计算 “ 873456 × 3456876 873456times 3456876 873456×3456876” 和 “ 3 × 4 3times 4 3×4”,哪个更快/strong>
试试看是最直接的了。我们先写个代码比较一下上述两个乘法的计算耗时:
然后我们分别用相对大的数字和相对小的数字来计算10000乘法:
时间几乎是一致的。可以简单得说:
- 计算机并不会因为乘数的数位短而运行的更快。
这有悖于我们的直觉!在我们看来,越长的数字不是需要越多的步骤来计算吗如我们用竖式计算。
事实上,我们之所以在竖式计算时会感觉数字越短计算越快是因为我们可以 “一眼” 识别到数字的长度。我们一眼就看完了整个数字,而计算机只能枚举整个字长空间,才能确定数字的结束。
我们先来看一下CPU乘法器的结构:
这只是一个引子,我们不仅仅可以得到 “计算机并不会因为乘数的数位短而运行的更快。” 的结论,更重要的是,我们又找到了一种计算大数乘法的方法,即:
- 类似硬件乘法器那般机械地完成整个计算,它暴露的是乘法过程的本质。
CPU乘法器将上述基于二进制的算法硬化到了门电路里。之所以可以硬化到CPU里,完全是利用了NP/PN结的特性,它们恰好可以用通和断表示1和0!
这里引出一个新的问题:
- 这个算法可以基于十进制的硬件实现吗/strong>
当然,这只是一个 “仅仅觉得好玩” 的问题,我并不会去真的做这么一个装置。
这种装置即便是做出来也只能欣赏一下机械之美,在现代电子计算机面前,再精致的机械计算装置只能拿来看,就像我们在博物馆看100多年前的戴姆勒梅赛德斯奔驰一样。
十进制世界没有硅可用,NP/PN结只有两个状态,我们找不到现实世界中有十个状态的物件,十个手指头显然不足以支持大规模计算,那么我们如何造一台十进制的计算机器呢。
千百年以前人们就在思考这个问题了,从算筹,算盘,到帕斯卡加法机,差分机都是这方面的勇敢尝试,阅读和研究这些资源是技术考古学的事,但是今天,我想在现代的视角下从零设计一个十进制乘法器。
首先能想到的一个现成的加法器就是机械钟表。这是一个典型的3位60进制加法器!
机械钟表作为一个加法器一直在持续做 递增 加法操作,逢60进1,任意时间的时间值就是分别读时针,分针,秒针的读数叠加,读作 “H时M分S秒” ,非常类似 “a百b十c” 。
拆开机械钟表,我们发现这是一个三个不同大小的齿轮契合的传动装置,原理非常简单,比葫芦画瓢,我们就能实现一个三位十进制加法器了,把刻度按照的 10 60 dfrac{10}{60} 6010/span>归一即可。
早期的帕斯卡加法器差不多也是这个原理。如果我们把这种齿轮契合传动的加法装置看作是一个 十进制模拟计算装置 的话,我今天要介绍另一种截然不同的 十进制数字化计算装置 。
先来类比二进制数字系统。
前面说了,二进制的硬件实现依赖了自然界的物质硅。二极管,三极管组成的门电路刻画在硅片上形成的芯片,是数字系统的基础。
然而十进制没有硅可用!怎么办/p>
用齿轮啊!
齿轮是万能的,我们照着门电路的样子,用齿轮来堆积一个十进制乘法器如何
为了完成这个目标,先看芯片是如何进行二进制计算的。事实上,芯片不会计算,它只是一种晶体而已,之所以它看起来是会计算的,是因为人们设计了 恰好让它看起来会计算的电路 ,这个设计背后的依据就是 “真值表” 。
换句话说,芯片并不知道 10 & 11 10 & 11 10&11 意味着什么,它并不懂布尔代数,芯片在计算 10 & 11 10&11 10&11时是通过查内化到电路的一张表来完成的。
我们需要在装置里内化一张 “十进制真值表” 。
二进制的真值表基于二进制3个基本运算与,或,非而生成,而十进制基本运算又是什么呢于我们人而言,很显然,十进制的基本运算就是一位数加法和一位数乘法,因此,可以认为, 九九加法表和九九乘法表就是十进制的真值表。
事实上,二进制的与,或,非操作就是二进制的乘,加,取相反数。
以九九加法表为例:
我们需要设计一个装置,通过3维数组的前两个维度定位操作数,最后一个维度定位结果,比如,我们要找 4 + 5 4+5 4+5的结果,那么它就是:
乘法亦然。
因此很显然,用 行列定位装置 将会非常方便,行和列作为两个输入,其定位的矩阵单元作为输出,可以确定结果的个位和十位,个位直接输出,十位参与下一级的进位运算。
以 a n . . . a 2 a 1 × b = c m . . . c 1 a_n…a_2a_1times b=c_m…c1 an/span>...a2/span>a1/span>×b=cm/span>...c1为例,看看一个多位数乘以一位数的乘法装置最终是什么样子:
如果让电子元器件实现上述的乘法装置,那再简单不过了。电子装置中,九九乘法表输出的个位和十位可以轻而易举的传动到其它加法表的行或列选择杆。
对于电子装置而言,无论是模电还是数电,所有的问题都可以转化为开关问题。想把力从A点传到B点,只需要AB导线连接,B处装控制动力的继电器,A点接通电源即可。
对于纯机械的方案,电子装置的设计思路行不通,因为纯机械装置只认识朴素的牛顿定律,不借助简单机械构件,力只能横平竖直地传导,或者借助齿轮,轮轴等圆周力,径向力,轴向力改变力的方向。
但这也正是纯机械设计的魅力之所在,如果说数电领域二极管,三极管组成的与门,或门,非门可以组成一切,那么在机械领域,齿轮,轮轴,杠杆作为基本构件,通过巧妙的组合,也能玩得五花八门。这也显示了机械设计和电子设计的另一个很有意思的区别:
- 机械设计的特点在于,大部分人都能看懂,但是却设计不出来,而电子设计则相反,没有基础的人根本看不懂,而一旦有了基础,电子设计并不是很难。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!