本系列文章預計會有10個章節(jié),這套文獻會系統(tǒng)講述計算機科學本身,這里是第一季第03篇如果讓你用機械設計一款可以實現(xiàn)一個簡單3位數(shù)以內(nèi)的加減計算的裝置,你有想法嗎?先思考下!其實這個問題我們從未思考過,因為我們所處的社會,隨手拿個計算器、算盤、草稿紙上算都能得出結(jié)果。但你會發(fā)現(xiàn),一兩個這樣的計算不會勞累,如果是1000個,甚至1W個這樣的重復計算豈不是很累。當然,現(xiàn)代的方法是用計算機寫個程序就可以自動計算實現(xiàn)。但是在那個還沒有電力、蒸汽動力的社會,如何來實現(xiàn)。對古人來講不僅是一場技術(shù)挑戰(zhàn),更是一種思維競爭。我們先來理一理做這樣一臺機器要怎么實現(xiàn)?首先,需要動力吧,從最簡單入手的話,人工就是一個很好的動力來源。人可以通過身體做功轉(zhuǎn)化機械能,至于如何轉(zhuǎn)化,要看具體的機械裝置。其次,需要一個能將動力轉(zhuǎn)化為計算的裝置... 當然,這個才是最難實現(xiàn)的。
艾倫·麥席森·圖靈
好,我們先停下來看看在上個世紀30年代中期,圖靈是怎么思考關(guān)于計算這個問題的,他有三個靈魂拷問。第一個問題,世界上是否所有數(shù)學問題都有明確的答案?第二個問題,如果有明確的答案,是否可以通過有限步驟的計算得到答案?第三個問題才是,對于那些有可能在有限步驟計算出來的數(shù)學問題,能否有一種假想的機械,讓它不斷運動,最后當機器停下來的時候,那個數(shù)學問題就解決了?其實,以上這三個問題已經(jīng)升華到一種非常深的哲學層面,以至于后來演化為:圖靈模型。這個后期再談,不過我們希望通過這三個問題來激發(fā)我們再一次對計算的認識。從上面這個圖來看,不難發(fā)現(xiàn)對于加法的計算,我們只需要將每個位制的數(shù)字進行相加即可,關(guān)鍵的問題就是考慮如何進位問題。當然這個問題簡單,請看下面這個機構(gòu),這個機構(gòu)是契克卡德的單齒進位機構(gòu)??梢钥闯龈呶积X輪有一條長桿會在齒輪轉(zhuǎn)動一周的時候?qū)⒌臀积X輪進行一次傳動,這個簡單的操作,就可以實現(xiàn)一個進位。有了以上思考和認知,我們再來仔細學習下帕斯卡是如何設計這款計算器的。見上圖,從外表看,機器的上半部分是開著6個小窗口的讀數(shù)區(qū),每個區(qū)域都有一個數(shù)學顯示,而下半部分則是6個緊挨著的置數(shù)旋鈕??梢钥吹贸?,其實盒子內(nèi)部的示數(shù)輪與置數(shù)輪是聯(lián)動的。下面的置數(shù)旋鈕的造型也是很特別,十根輻條從中心發(fā)散,像個車轱轆,制動的時候還需要用一支硬筆戳在輻條之間的空檔,順時針撥動,直至撞上底部那根類似留聲機唱針的固定小棍。這種置數(shù)方式像極了老式的轉(zhuǎn)盤電話機。帕斯卡起初的設計與契克卡德的單齒進位機構(gòu)類似(盡管他并不知道計算鐘的存在),是一種長齒進位機構(gòu)——齒輪的10個齒中有一個齒比另外9齒稍長一些,正好可以與旁邊代表更高數(shù)位的齒輪嚙合,正轉(zhuǎn)實現(xiàn)加法的進位,反轉(zhuǎn)實現(xiàn)減法的借位。我們看看動圖 28 +35 = 63,是怎么實現(xiàn)的?
解說:隨便找一個筆桿,先將高位撥動到2,然后再將低位撥動到8,再將高位+3,也就是撥動到5,然后再將低位+5,也就是 8+5 = 13,所以低位需要增加5個數(shù),當?shù)臀粡?轉(zhuǎn)動到下一個3的時候,高位會通過進位機構(gòu)自動進一,就是將之前的5變?yōu)?。所以最后的結(jié)果就是63。說實話,我感覺好像并沒有簡化計算,反而手算會更快。但是我們不必糾結(jié)這個問題。古人能想到這一點已經(jīng)很厲害了。當時巴貝奇做出來的差分機,人稱“會思考的機器”。不過這類進位機構(gòu)有著一個很大的缺陷——齒輪傳動的動力來自人手。同時進行一兩個進位還好,若遇上更多位的連續(xù)進位就很麻煩,比如999999+1,從最低位一直進到最高位,長齒全部與下一位齒輪嚙合,齒輪旋轉(zhuǎn)起來相當吃力。你說你力氣大,照樣能轉(zhuǎn)得動旋鈕沒問題,可齒輪本身卻不一定能承受住這么大的力,搞不好容易斷裂。為了解決這一缺陷,帕斯卡嘗試了各種改進方法,卻發(fā)現(xiàn)再精妙的齒輪設計都無法繞開連續(xù)進位的魔咒。這個問題不解決,制造機械式計算機就是扯淡。這位天才思前想后,最后破天荒地想到了借助重力——他設計了一種叫sautoir的裝置,sautoir來自法語sauter,意為「跳」。低位齒輪在旋轉(zhuǎn)過程中將sautoir抬起,每當轉(zhuǎn)過9回到0時,sautoir便掉落,其上的爪子推動高位齒輪轉(zhuǎn)動36°,整個過程sautoir就像蕩秋千一樣從一個齒輪「跳」到另一個齒輪。上一個進位與下一個進位分離,連續(xù)進位時產(chǎn)生多米諾骨效應。
其實剛開始我還沒有理解這個裝置究竟解決了什么問題,后來我才意識到,其實就是省力,通過自動裝置來省去上面我們講過的普通進位機構(gòu)帶來的麻煩。往后的一百多年里,許多機械師都對這種前無古人后無來者的絕妙設計贊不絕口。帕斯卡本人對自己的發(fā)明更是相當滿意,他夸張道:有了sautoir,機器做到一萬位數(shù),用起來也和兩位數(shù)沒差。然而,連續(xù)進位是沒問題了,sautoir卻有著一個致命缺陷——不能反轉(zhuǎn),這就給使用前的置零制造了麻煩,需要從個位開始依次將每一位數(shù)轉(zhuǎn)到9,而后在個位上加1以產(chǎn)生連續(xù)進位,完成所有位的置零。一萬位的機器做出來恐怕也沒人敢用吧!不能反轉(zhuǎn)就以為不能做減法,那帕斯卡如何解決計算減法這個問題呢?繼續(xù)往下看。上面我們所講的基本都是加法計算,我們再來看看如何實現(xiàn)減法。怎么實現(xiàn)減法呢?這仍然難不倒我們的帕斯卡——既然只能做加法,那有沒有一種方法可以將減法轉(zhuǎn)換成加法呢?結(jié)果他還真想出了一種用加法代替減法的方案,正是計算機中沿用至今的補碼。十進制下的補碼是補九碼(9's complement):對于一位數(shù),1的補九碼就是8,2的補九碼是7,3的補碼是6,以此類推,原數(shù)和補碼之和為9即可。在6位數(shù)中,a的補九碼就是6個9減去a。設6位數(shù)的補九運算為cp(),用公式表示就是:利用簡單的數(shù)學技巧(結(jié)合律),便可將減法運算轉(zhuǎn)換為有補碼參與的加法運算:所以:兩數(shù)之差的補碼,等價于被減數(shù)的補碼與減數(shù)之和。可能你沒注意,其實帕斯卡計算器上面的欄還有一層被擋住的,我們打開看看。帕斯卡在示數(shù)輪上標了兩排數(shù)字,一排是原數(shù)0~9,,一排是一一相應的補碼,補碼在上,原數(shù)在下。不論轉(zhuǎn)到哪個數(shù)字,其補碼也一同出現(xiàn)。做加法時擋住補碼露出原數(shù),做減法時反之,但任何置數(shù)都是對下排的置數(shù)。我們來看個案例,比如計算1998 - 886 = 1112 是如何計算的。補碼的補碼就是原數(shù)。輸入被減數(shù)1998的補碼998001,上排自動顯示為1998:給998001加上減數(shù)886,下排得998887,上排自動顯示為001112,便是最終結(jié)果:整個過程用戶看不到下面一排數(shù)字,其實玄機就在里頭,原理非常簡單,上下排互為補碼,09一輪回,卻很有意思。- 前人的思考,我們的階梯?;貧w到古人時代,我們不一定真正能夠解決這些工程問題,我覺得帕斯卡的能之所以有所成就,關(guān)鍵在于,第一:他真正懂數(shù)學,從補碼的思想來看,他對數(shù)學的運算技也有一定的實力。第二:知行合一,能夠親自動手敢于創(chuàng)作。他的精神值得我們借鑒和學習;
我查過很多關(guān)于寫帕斯卡本人和其研究的文章,其實很少很少,可能他的創(chuàng)作放在歷史長河里面還不及牛頓等人的一個頁碼,但是所有最讓人值得尊敬的都是首批潛心的開發(fā)者,從0到1,實屬不易。在此我以本篇文章來表達對他的敬意;
看清事物的本質(zhì),有利于提升智慧。如果你對一樣事物研究的越透徹,你就越能在此基礎上進行創(chuàng)作。實現(xiàn)自我的自由度也就越大;
Masir - 2023/01/12
于 東莞
祝幸福~
[1].帕斯卡算術(shù)機——數(shù)學天才的十余年匠心 - 簡書 (jianshu.com)[2].https://zh.wikipedia.org/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
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。