電腦之前,人怎麼算大數字
不過,把這套技術發展到藝術等級的,是南美洲的印加帝國。他們有一種叫做「奇普」(quipu,也寫作 khipu)的結繩系統:一條主繩上垂掛著幾十到上千條副繩,繩子的顏色、材質、長度、打結的位置與結的型態,全部都是資訊。哪些是十位數的結、哪些是個位數的結、哪些代表「無」或「零」,都有嚴格的規則。
最讓人震驚的是:印加帝國沒有發展出文字,卻管理了一個橫跨安地斯山脈、人口上千萬的龐大帝國。他們靠什麼記帳、徵稅、統計人口?靠奇普。考古學家甚至在奇普上辨識出類似「層級結構」與「會計分錄」的邏輯,有人認為它記錄了當地村落的人口、牲畜、農作與勞役數據。近年也有研究者主張,部分奇普可能帶有敘事或韻文性質,但這部分仍有爭議。
無論如何,奇普說明了一件事:計算與記錄,不一定要靠文字。當數量大到人腦記不住的時候,人類會發明各種「外部儲存裝置」——繩結、刻痕、泥板、算盤珠,全都是同一條思路的產物。
巴比倫泥板與六十進位:沒有零也能算天文
如果說結繩是「可攜式資料庫」,那美索不達米亞的泥板就是「可攜式計算表」。
巴比倫人(更精確地說,是從蘇美爾到巴比倫時期的書寫傳統)用楔形文字在泥板上記錄數字,使用六十進位加位值制。有趣的是,他們一開始並沒有「零」的符號,只靠數字之間的間隔來判斷位值。這在計算上會造成極大的歧義——「一」和「六十」和「三千六百」寫起來可能長得一樣,端看你怎麼讀。後來他們發明了兩個斜楔並排的符號來表示「這個位置是空的」,這可以說是零的雛形。
更值得佩服的是他們的「計算工具」思維。考古出土的泥板裡,有大量的乘法表、倒數表、平方表、平方根表。例如著名的 YBC 7289 泥板,上面畫了一個正方形與對角線,旁邊的數字換算成十進位大約是一點四一四二一二九六——這是根號二的近似值,準確到小數點後第六位。這不是算出來的「答案」而已,這是被反覆使用的一張「查表資料」。
這代表什麼?代表巴比倫的書記員在處理大數字時,不是每次都從頭硬算,而是查表。就像我們今天不會每次都用長除法算商,而是直接用計算機一樣。人類很早就理解:把重複的計算結果保存下來,是對抗大數字最有效的手段。
二、算盤:人類史上最長壽的計算工具
談到電腦之前的計算,算盤是絕對不能跳過的一段。它的壽命長到不可思議:從漢代、唐宋一路用到二十世紀,甚至今天在日本、中國的珠算檢定裡還活得好好的。而且它不只是「工具」,它本身是一整套演算法與訓練體系的載體。
從羅馬算盤到中國算盤:珠子上的位值制
算盤不是某一個文明獨有的發明。古羅馬有一種青銅製的手算盤,上面有滑槽與小石子,羅馬人稱為 calculi——沒錯,英文的 calculate(計算)這個字,字源就是「小石子」。古希臘、古印度、中世紀歐洲也都有類似「算板」(abacus)的東西,本質上都是在平面上用某種可移動的物件來表示位值。
中國算盤的成熟時間點,學界說法不一,但可以確定的是,宋代文獻與繪畫裡已經能看到算盤的身影,例如《清明上河圖》裡的店鋪場景,就被認為畫有算盤。明代以後,中國算盤的形制大致定型為「上二下五」或「上一下四」,這種設計不是隨意的,而是跟十六進位(十六兩為一斤)與十進位的混合使用習慣有關。
日本從中國傳入算盤後,發展出自己的「十露盤」,形制簡化為上一下四,直到今天仍在使用。俄羅斯也有自己的 schoty,珠子是橫向排列的。不同文明各自演化出「用珠子表示位值」的裝置,說明這個想法有多自然:把抽象的位值,具象化成可以撥動的物件。
算盤為什麼能打敗早期機械計算機
這裡有一個很有名的歷史軼事。一九四六年,日本剛戰敗不久,駐日美軍與日本方面辦了一場「計算對決」:一邊是熟練的珠算高手,另一邊是美軍帶來的電子計算機 UNIVAC。據當時《每日新聞》的報導與後續流傳,比賽項目包含加減乘除與複合運算,算盤在加減法與部分項目上明顯勝出,整體成績不落下風。
這個故事後來常被拿來當成「傳統勝過科技」的勵志素材,但真實情況比較複雜:那台 UNIVAC 的操作者也不是熟練的專業人士,而且早期電子計算機的乘除法速度並不快。不過這個故事確實點出了一個重點:算盤的設計極度貼合人類的心手協調能力。
為什麼算盤效率這麼高?關鍵在於,它把「位值」、「進位」這些抽象規則,變成了手指的動作。你在撥珠的時候,不需要在腦中維護一個完整的大數字,因為那個數字已經「外化」在算盤的珠子上了。人腦負責判斷,算盤負責記憶——這其實就是一種最原始的人機分工。而且它不需要電力、不怕停電、結構簡單到幾乎不會故障,維護成本趨近於零。
珠算口訣:把演算法背進肌肉記憶
如果你小時候學過一點珠算,應該對「三下五除二」這類口訣有印象。這些口訣看起來像咒語,但本質上,它們是被壓縮成韻文的演算法指令集。
舉例來說,「一下五去四」講的是加一的時候,如果下排珠子不夠用,就把上一顆(代表五)撥下來,同時把下排的四顆撥走。這是一個完整的動作序列,而口訣把它壓成五個字,讓人可以邊念邊做,最後甚至不用念、變成肌肉記憶。
更厲害的是,算盤不只能做加減乘除,還能開平方、開立方。中國古代有一套完整的珠算開方程序,透過反覆的「估商、乘、減、移位」,可以在算盤上開出多位數的平方根。這些程序被寫成口訣,代代相傳,等於是把演算法寫進人的「固件」裡。
從資訊科學的角度看,這其實非常可怕:在沒有電腦的年代,人類用「口訣」這種載體,把演算法從一個人複製到另一個人,而且複製成本極低。一個學徒只要跟著師傅念三年口訣,就能成為一台可以處理十幾位數運算的「生物計算機」。
三、紙筆的力量:印度-阿拉伯數字、零與對數
算盤很強,但它有一個先天限制:它處理的是「連續操作」,算完之後,除非你抄下來,否則結果就消失了。要處理真正龐大的數字、要留下計算過程、要驗算、要傳遞給別人——這些需求,最終還是要靠紙筆。
零的誕生:從「空位」到一個真正的數字
我們今天覺得「零」理所當然,但在數學史上,零是一個極其叛逆的概念。「什麼都沒有」怎麼能是一個數字?如果它是一個數字,那除以它會怎樣?這些問題困擾了人類幾千年。
巴比倫人有空位符號,瑪雅人有貝殼形狀的零,但真正把零當成一個可以參與運算的「數字」,一般認為是古印度數學家的貢獻。西元三到四世紀的巴克沙利手稿(Bakhshali manuscript)中,已經可以看到類似零的符號;而西元七世紀的印度數學家婆羅摩笈多,更明確寫下了零的加減乘除規則(雖然他對零除以零的處理在今天看來並不完備)。
這套「印度數字」後來經由伊斯蘭世界傳播。九世紀的波斯數學家花拉子米寫了《印度數字計算書》,把位值制與十個數字(包含零)的用法系統化。這本書後來被譯成拉丁文,影響了整個歐洲。今天英文的 algorithm(演算法)這個字,就是從「al-Khwarizmi」(花拉子米)這個名字演變來的。
義大利數學家斐波那契在一二〇二年出版的《計算之書》,更是把印度-阿拉伯數字推薦給歐洲商人。他一開始還被保守派抵制,因為當時歐洲的商界習慣用羅馬數字與算盤,覺得新方法「不牢靠」。但歷史證明,位值制加上零,是筆算能夠規模化的關鍵基礎。沒有零,你就很難處理「一〇五」和「一五」之間的差別;沒有位值,長除法幾乎不可能進行。
手算大數的江湖:格子乘法、長除法與開方
有了阿拉伯數字,歐洲的計算師(那是一種職業)發展出一整套手算技術。其中最有趣的,是一種叫做「格子乘法」(lattice multiplication,又叫 gelosia 或格子乘法)的方法。
做法是這樣:先畫一個方格,格數等於兩個乘數的位數。把每個位數相乘的結果填進格子裡,每個格子再沿對角線切成兩半,十位數寫上半、個位數寫下半。最後沿著斜線把數字加起來,就得到乘積。這個方法的妙處在於,它把「乘法」轉換成「填表加上斜線加法」——你不需要記住任何中間結果,因為所有東西都寫在紙上。對於動輒十幾位數的乘法,這比傳統直式乘法可靠得多。
除此之外,還有「俄羅斯農民乘法」(不斷地將一個數加倍、另一個數減半,最後把對應的項加起來),以及各種針對特殊數字的速算技巧,例如乘以十一、乘以九十九、用補數做減法等等。這些技巧的共同點是:把一個困難的運算,拆解成一系列簡單的、不容易出錯的小步驟。
開平方也有一套筆算程序,原理是 (a+b)² = a² + 2ab + b² 的逐步逼近。這套方法在今天的國中數學課本裡還看得到,但多數人學完就忘了,因為計算機太好用。可是在十六世紀,這可是天文學家與測量員吃飯的傢伙。
對數與計算尺:把乘法翻譯成加法
如果說前面那些方法是在「優化」乘法,那十七世紀的約翰·納皮爾(John Napier)做的事情,是根本上改變了遊戲規則。
納皮爾在一六一四年發表對數理論。核心概念很簡單但極其深遠:如果一個數可以寫成某個固定底數的次方,那麼兩個數相乘,就等於它們的指數相加。用數學語言說就是 log(ab) = log(a) + log(b)。而加法遠比乘法容易算,也更不容易出錯。
於是,只要有一張夠精確的對數表,任何複雜的乘除運算,都能被降級成加減法。天文學家算了幾千年的行星位置,突然之間工作量下降了一個數量級。法國數學家拉普拉斯後來甚至說,對數的發明「把天文學家的壽命延長了一倍」——因為他們原本要花一半的人生在做乘法。
對數表本身是怎麼算出來的?這又是一個地獄級的工程。納皮爾自己花了二十年,手工計算出第一批對數表。後來的數學家持續改進,把精度推到小數點後十幾位。這些表被印成厚厚的書,成為每個工程師、航海員、天文學家的標準配備。
而對數的「可攜版」,就是計算尺。計算尺利用兩條對數刻度的相對滑動,把加減法變成一種機械操作。你只要把游標移到對應位置,就能直接讀出乘積。從十七世紀一路到一九七〇年代,計算尺都是工程師的標準配備——阿波羅計畫的工程師,口袋裡插的就是計算尺。直到掌上型電子計算機普及,它才正式退役。
從對數表到計算尺,這條路線展示了一種非常典型的「前電腦時代」思維:不要試圖讓計算變快,而是改變問題的形式,讓它變成另一種更簡單的問題。這種思維,今天的演算法設計裡依然存在。
四、手指之外的機器:齒輪、滾輪與維多利亞時代的電腦夢
算盤和對數表雖然強大,但它們都還是「人在算」。真正想要把計算完全交給機器的嘗試,要從十七世紀的齒輪開始說起。
帕斯卡加法機與萊布尼茲步進滾筒
一六四二年,年僅十九歲的法國數學家布萊茲·帕斯卡(Blaise Pascal)做了一台加法機。動機很實際:他的父親是稅務官員,每天要處理大量加減法,帕斯卡想幫父親省點力氣。這台機器用齒輪與棘輪來實現進位,使用者轉動撥盤輸入數字,機器就會自動加總。
帕斯卡的機器只能做加法(與透過補數實現的減法),而且造價昂貴、容易故障。但它證明了「進位」這件抽象的事,可以用機械結構實現。
三十年後,德國數學家萊布尼茲(Gottfried Wilhelm Leibniz)把這個概念推到下一步。他設計了「步進滾筒」(stepped reckoner),透過不同長度的齒輪來實現乘法與除法。這台機器的設計相當巧妙,但同樣面臨製造精度不足的問題,據說實際運作並不可靠。
不過,這些機器的歷史意義不在於它們有多好用,而在於它們開啟了一條新路線:計算可以不只靠人腦,也可以靠機械狀態的變化。這條路線後來會一路通向巴貝奇、通向圖靈、通向我們今天的電腦。
差分機與分析機:巴貝奇的維多利亞時代電腦夢
十九世紀的英國數學家查爾斯·巴貝奇(Charles Babbage),大概是前電腦時代最「腦洞大開」的一個人。
他一開始想做的是「差分機」(Difference Engine)。當時的數學表(航海表、天文表、對數表)都是人工計算的,錯誤率高得嚇人——因為人是會累、會分心、會抄錯的。巴貝奇的想法是:如果能用機器來計算這些表,就能大幅降低錯誤。差分機的原理是利用「有限差分法」,把多項式的計算轉換成一連串的加法。因為加法最容易用齒輪實現,所以整台機器可以自動產出高精度的數學表。
但差分機沒能在他有生之年完成。政府資助中斷、零件精度不足、巴貝奇本人又不斷修改設計,最終只留下了部分原型與大量圖紙。有趣的是,後來的倫敦科學博物館在 1991 年按照巴貝奇的原始設計,真的造出了一台差分機,而且它真的能正確運作。這證明他的設計是對的,只是當時的製造技術跟不上。
更瘋狂的是他的下一個設計:「分析機」(Analytical Engine)。這台機器不只能算多項式,而是具有通用計算能力——它有「儲存單元」(store)、「運算單元」(mill)、打孔卡輸入,甚至支援條件分支。這已經不只是計算機,而是通用電腦的雛形。
為分析機寫下第一批演算法的,是愛達·洛芙萊斯(Ada Lovelace)。她在一份譯註中,詳細描述了如何用分析機計算伯努利數,並且提出了「機器可以處理符號,而不只是數字」的洞見。今天她被視為史上第一位程式設計師,而她的洞察在一個半世紀後才真正被實現。
人肉計算機:十九世紀的計算工廠
在巴貝奇的機器還沒造出來、電子計算機還在一百年後的時候,人類面對大數字計算需求的方法很簡單粗暴:找很多人來算。
最經典的案例是法國數學家普羅尼(Gaspard de Prony)在十八世紀末主持的「大表」(Tables du Cadastre)計畫。當時法國政府想要一套全新的、高精度的對數表與三角函數表,覆蓋範圍極大。普羅尼想到了一個天才辦法:把計算拆成三層。
第一層是「數學家」,負責設計公式與計算方法;第二層是「計算員」,負責算出關鍵的中間值;第三層是最底層的「操作員」——他們只需要會加減法,照著固定的格式,把數字加起來、抄下來。普羅尼自己形容,他是把計算工作「工廠化」了,就像亞當·斯密描述的分工生產一樣。
這個模式後來在十九世紀被大量複製。哈佛天文台雇用了一批女性計算員,專門處理天文觀測數據,人稱「皮克林的后宮」(Pickering's Harem)。英國的《航海天文曆》也是靠一群計算員年年算出成千上萬筆資料。這些人的工作內容極度重複,但正是這些「人肉計算機」,支撐起了十九世紀的天文學、航海與保險業。
從某個角度看,這段歷史非常諷刺:人類在發明電腦之前,先把自己變成了電腦。而「把計算拆解成標準化步驟、交給低技能人力執行」這件事,本身就是一種演算法設計的體現。
五、大數字背後的真實剛需:航海、天文與錢
為什麼人類要這麼拼命算大數字?不是因為數學家閒著沒事,而是因為有些需求逼著你非算不可。
經度問題與航海曆
在所有逼出大數字計算的需求裡,航海是最硬的一個。
船在海上,要知道自己的位置,需要兩個座標:緯度與經度。緯度好解決,看太陽或北極星的高度就知道。但經度非常麻煩,因為地球在轉,你必須知道「現在幾點」以及「出發地的時間」,兩者相減才能算出經度。問題是,海上沒有辦法精確計時。
其中一條解法是「天文法」:觀測月亮與特定恒星之間的角距,再對照預先編好的航海曆。但要編出這本曆,天文學家必須計算未來好幾年、成千上萬筆的天體位置。這是一個典型的大數字計算工程,而且誤差不能太大,否則船會開到礁石上。
英國為此在一七一四年設立了「經度獎金」,一六七五年成立的格林尼治天文台,任務之一就是為航海提供精確的天文數據。你可以說,整個十八世紀的天文計算產業,是被航海需求硬生生撐起來的。
複利、保險與人口統計
另一個大數字的需求來源,是錢。
複利計算很可怕:本金、利率、年數三個變數一組合,數字就會快速膨脹。十七世紀的商人如果要計算一筆長期借貸,得反覆做乘法,還要做開方。這在沒有對數表的年代,是真正的專業技能。
人壽保險的興起,更是把計算推向了另一個層次。你要收多少保費才不會虧本?這取決於一群人未來幾年的死亡率。十七世紀的約翰·格朗特(John Graunt)開始系統性地分析死亡率數據,後來天文學家哈雷(Edmond Halley)在一六九三年製作了第一張較完整的生命表。有了生命表,保險公司就能算出年金現值、保費費率。
這些計算牽涉到大量的乘方、折現與加總,手算極為痛苦。所以十七、十八世紀的「精算表」成為一種重要的商業出版物。你買一本表,查一查,就能算出保費。這又是「查表代替硬算」的思維。
六、古人的計算心法:估計、近似與交叉驗證
除了工具與機器,古人對付大數字還有一套「心法」。這套心法不是精確計算,而是在不確定的情況下,得到足夠好的答案。
費米估算的祖先:先抓數量級
今天我們把「用粗略假設推出大概答案」叫做費米估算,但這件事古人早就開始做了。
古希臘的埃拉托斯特尼(Erathosthenes)在西元前二四〇年左右,利用亞歷山卓與賽伊尼兩地正午太陽角度的差異,加上兩地距離的估計,算出地球周長大約是二十五萬斯塔德。換算成現代單位,與真實值誤差大約在百分之幾到百分之十之間——這在沒有精確測量工具的年代,簡直是神蹟。
中國的祖沖之把圓周率算到三點一四一五九二六與三點一四一五九二七之間,用的是劉徽的割圓術:用正多邊形不斷逼近圓。他一路算到正一萬二千二百八十八邊形(一說三萬二千七百六十八邊形),這需要對九位數進行反覆的開平方運算。這種毅力與精度,即使以今天的標準來看都相當驚人。
控制誤差的技巧:驗算、交叉比對與有效數字
在大規模計算的場景裡,最可怕的不是算不出來,而是算錯了卻不知道。
所以古人的計算流程裡,通常會內建驗算機制。例如:用不同的方法算同一個結果,看看是否一致;或者用「除以九」的餘數檢驗法(九餘數法)來快速檢查乘除是否出錯;又或者把結果代回原式反推。這些技巧在今天的基礎數學教育裡已經很少被強調,但在沒有電腦的年代,它們是防止大災難的最後一道防線。
此外,「有效數字」的觀念也很早就存在。天文觀測本身就有誤差,如果你用錯誤的精度去宣稱結果,只會鬧笑話。因此古人會根據觀測的精確度,決定計算要保留到哪一位。這其實就是現代科學計算裡「誤差傳播」概念的雛形。
七、電腦出現之後,我們失去了什麼,又得到了什麼
講到這裡,我們大概可以回答文章開頭那個問題了:一六〇〇年的人要算一顆行星的位置,靠的是紙筆(或算盤)、對數表、三角函數表,加上多年的訓練與極度的耐心。而今天,我們只要打開手機裡的星圖 App,零點三秒就得到答案。
這個轉變當然是巨大的進步。它讓人類可以把精力從「計算」轉移到「建模」與「詮釋」。沒有這些前電腦時代累積的計算技術,現代的科學、工程、金融根本不可能存在。對數、位值制、演算法的概念,全都是一步一步從那些「笨辦法」裡長出來的。
但我們也確實失去了一些東西。比如對數值的直覺——很多人現在看到一個很大的數字,完全沒有「這個數量級合不合理」的判斷力,因為從小到大都是按計算機。比如心算與估算的能力,在沒有計算機的時代,一個商人必須能快速估算成本與利潤,這是一種生存技能。又比如對誤差的敏感度——電腦給的答案看起來都很精確,但輸入錯了,輸出就毫無意義。
所以,回頭看這段歷史,與其說它是一段「人類被機器取代」的過程,不如說它是一段人類不斷把自己的能力外部化的過程。從手指到繩結,從繩結到算盤,從算盤到對數表,從對數表到齒輪,從齒輪到電子計算機——每一步,人類都在把「計算」這件事從腦子裡搬出去,放到某個更可靠、更可規模化的載體上。
而每次搬出去,人類就多出一些腦力,去想更難的問題。這大概就是我們今天還能坐在這裡,一邊喝咖啡一邊討論「古人怎麼算大數字」的原因吧。
下次你按下計算機的等號鍵時,不妨想一想:這個動作的背後,是三千年的繩結、泥板、算珠、齒輪,還有無數個在燭光下抄寫數字的人。他們沒有電腦,但他們算出了整個世界的座標。
```
💬 想說點什麼?
歡迎到留言板分享你的想法、心得或疑問。
💬 前往留言板 →