癮科學:查爾斯.巴貝奇的差分機與分析機

查爾斯.巴貝奇(Charles Babbage)生於 1791 年,卒於 1871 年,是活躍於十九世紀的數學家、發明家兼機械工程師。那是個人們相信機械的力量可以做到一切的時代,源自於工業時代的進步帶來了蒸汽機和各種機械裝置,將人們從各種勞動中解放了出來。就是在這樣的環境下,巴貝奇開始了對數學製表的機械化的研究 -- 在那個沒有計算機和電腦的時代,很多計算最快的方式其實是用查表的,但是靠人工來製表不僅費時費力,而且難免會有計算錯誤、抄寫錯誤、校對錯誤、印製錯誤等各式各樣的問題。巴貝奇在劍橋求學時,發現到了這個現象,於是就將改善製表時的各種問題當作了畢生的志業。

聽起來這麼厲害的人,我們都應該讀過他的傳記了啊?為什麼最後這個名字卻沒有多少人知道呢?那是因為很可惜的,最後他因為經費、個性、大環境等種種因素而失敗了,沒能在十九世紀就掀起一次計算機革命。然而他的想法和圖紙卻留了下來,讓我們有機會可以一探這位天才在幾乎 200 年前的維多利亞時代,是如何差一點改變了世界。讓我們一起來看看巴貝奇的計算機吧!什麼是差分機?

差分機又稱差分引擎(Difference Engine),是巴貝奇畢生的研究所在。和你想像的可能有些不同,這其實並不是一台一般意義上的「計算機」 -- 當時可以做簡單的加減乘除的機械裝置已經存在,而巴貝奇的機器也沒打算和他們搶工作。準確的說,巴貝奇的機器是一台「多項式求值機」,只要將欲求值的一元多次方程式輸入到機器裡,機器每運轉一輪,就能產生出一個值來。假設我們以 F(x) = x²+4 做為例子好了,差分引擎吐出來的結果,就會是 F(1) = 5,F(2) = 8,F(3) = 13,F(4) =20...etc. 直到系統停止為止。機器運作最重要的基礎,在於其實要求值,完全只需要用到加減法而已喔!

上圖同樣是 F(x) = x²+4 的例子。第一步是先算出 F(1) 和 F(2) 的值之間的差(8-5=3),稱為第一階差( First Difference)。如果這個值和 F(2) 及 F(3) 之間的差(13-8=5)不同的話,就拿這兩個第一階差再算一次差( 5-3=2),稱為第二階差( Second Difference)。在這個例子裡,第二階差每一個都是 2,所以就不用再計算下去了。一次方程式最多只會有第一階差,二次會到第二階差,N 次會到 N 階差...etc。一但有了一個固定不變的差數後,就可以開始往前推算回去,接下來的每一個值,就是將差數和前一階的上一個值相加,即可獲得。例如求 F(4) 時,先將 2 加上上一階差的值 5 得到 7,再將 7 加上 F(3) 的值 13,就會得到 F(4) = 20,以此類推。以人類的角度來看似乎略顯得有些囉嗦,但這正是最適合機械計算的結構了。


差分機引擎一號



巴貝奇的想法很簡單,他想要造一台機器,從計算一直到最後印結果全部都自動化,在減少人工的同時,全面地消除可能出錯的一切問題點。他開始設計的第一台機器稱為差分機引擎一號(Difference Engine No.1),由英國政府補助出資,工匠 Joseph Clement 打造,預計完工後將有 25,000 個零件,重 15 噸。可惜,一方面是因為大量精密零件製造困難,加上巴貝奇不停地邊製造邊修改設計,從 1822 到 1832 年的十年間,巴貝奇只能拿出完成品 1/7 的部份來示範(上圖)。但即使如此,差分機引擎運轉中的精密仍然令當時的人嘆為觀止。可惜,再精采的演出,也無法改變巴貝奇已經嚴重超支的事實,再加上他不停的在製作過程中修改設計和其他的一些因素,令他和工匠師傅 Clement 間時有爭論。最後不僅導致 Clement 辭職,差分機引擎一號也很不幸地一直未能完成。最後 12000 個零件被熔掉回收,英國政府在 1842 年的最後清算發現,整個計畫一共讓英國政府賠掉了 17500 英鎊 -- 約等同於 22 台蒸汽火車頭,一個相當驚人的數字。

差分機引擎一號如果完成的話,25000 個零件會差不多平均分攤在計算的部份和印出的部份裡,兩者是不可分開的。1830 年的設計顯示它可以計算到第六階差,最高可以存 16 位數。

分析機引擎


不過對巴貝奇來說,差分機引擎不是個「失敗」。事實上他本來就對製造差分機引擎的行政工作感到無比地厭煩,和英國政府結束合作意味著他可以專心的坐下來,做他最拿手的事 -- 設計更強大的機器。在 1834 年他設計出了一台更加野心勃勃的機器,稱為分析機引擎(Analytical Engine)。列出它的功能可以讓人眼睛都突出來:首先,它的機械結構被分成了「計算單元」和「儲存單元」兩個部份,其中計算單元不僅內建四則運算,而且還可以「存」四組不同的運算方程式,用穿孔卡片(Punch Card)載入到機器裡。這台機器在設計上甚至有能力進行條件分支(if)、迴圈、平行處理等程式邏輯,只是巴貝奇的年代自然還沒有這些名詞的出現。最後的結果還可以選擇印刷、打卡、繪圖等多種輸出方式,從某些方面來說,它計算、儲存、I/O 三項分離的設計,和今日的電腦並無二致,只是最後分析機引擎只停留在了紙上,從沒做成實機過。

提到分析機引擎,就不能不提一下另一個傳奇的人物:愛達.勒芙蕾絲(Ada Lovelace)。愛達的父親就是英國的大詩人拜倫,只是拜倫在愛達九歲時就過世了。愛達小時候身體並不好,但並沒有因此落下教育,特別是(以當時的女性來說還蠻稀少的)科學和數學。她的家庭教師之一 Augustus De Morgan 對她數學能力的評價非常之高,認為她非常有機會成為第一流的數學家。愛達和巴貝奇認識於 1833 年,之後一直有維持通訊,因此對巴貝奇在差分機和分析機引擎方面的進展頗有了解。1842-43 年間,愛達翻譯了另一位義大利數學家 Luigi Menabrea(這位老兄後來做到義大利首相)關於分析機引擎的著作時,應巴貝奇的要求在後面附上了七篇她自已的手記。這七篇筆記比 Luigi 的原文還長,其中第七篇裡愛達用非常詳細的描述,設想了如果分析機引擎成真的話,要如何用它來求伯努利數列的值。雖然機器是機械的不是數位的,計數方式也是十進制的不是二進制的,但一般仍然認為這是世界上第一個電腦程式。

差分機引擎二號

在分析機引擎之後,巴貝奇運用在開發過程中得到的心得,重新回頭設計了差分機引擎。運用新的方法,在 1847-49 年間設計的差分機引擎二號可以計算到 31 位數,可以計算到第七階差,而且零件數還只有差分機引擎的 1/3。可惜的是,這時候巴貝奇已經找不到願意出資的人,因此差分機引擎二號也就停留在了紙上。到巴貝奇一生結束,一共只留下來了 1/7 的差分機引擎一號,一些實驗性的分析機引擎零件,和大量的筆記和圖紙。

故事結束了嗎?當然沒有。事實證明巴貝奇留下來的詳細圖紙才是最重要的遺產,在 1985 年時倫敦科學博物館決定照著巴貝奇的圖紙,打造一台完整的差分機引擎出來,回答兩個歷史性的問題:這東西,到底做不做得出來?做得出來的話,能照著巴貝奇的說明操作嗎?整個計畫一如巴貝奇當年的翻版,充滿了經費困難、生產問題、一推再推的期限和無數的技術困難。最主要的,因為只是紙上的概念,巴貝奇並沒有註明材料、工法等事項,因此工程學家只能用現代技術去反推當時的技術上限,確保做出來的機器是那個年代也能完成的。整台機器到 2002 年才完工,一共花了 17 年的時間,最後的成果,就是這個:



機器本身的部份大約在 3:30 開始,前面是巴貝奇的生平。完成的差分機引擎重五噸,長 11 英呎、高 7 英呎、最窄處 18 英吋,有 8000 個各式零件。機器的運作一如巴貝奇的描述,雖然單論運算能力來說是比今日的電腦差遠了,但至少完全證明了巴貝奇的設計並沒有錯。換了一個時空,說不定資訊革命還能提前個五十年呢!

當然,剩下來的問題就只有一個了:那分析機引擎呢?巴貝奇的兒子亨利.巴貝奇花了相當長的時間,試圖讓分析機引擎成真,但最多也就是在 1910 年時完成了沒有程式化能力的一部份計算單元,從此巴貝奇的名字便消失在歷史的長河中, 1930、1940 年代的科學家重新開始製造電腦時,根本就已經忘了巴貝奇的成就,不得不重新再走一次巴貝奇走過的老路,有趣的是,最後的基本架構依然是如此地相似。目前有計畫要讓分析機引擎也像差分機引擎一樣「死而復生」,希望能再一次地從實物中,了解查爾斯巴貝奇的天才。