1642 - Pascal 進位法計算機(讓機器自己進位)#
案件摘要#
1642 年,19 歲的 Blaise Pascal 造出 Pascaline: 第一台能自動進位的計算機,用五位數輪盤做加法、減法:
\[ \text{十進位} \quad \text{滿 } 10 \ \text{進 1} \quad\Longrightarrow\quad \text{加法不必再靠人腦}. \]
他發明的不是機器,而是進位制的機械化——此後所有計算機的核心, 從 Pascaline 到 5 奈米晶片,都是這條進位邏輯的直系後裔。
前因 -- 為什麼會有這個案子#
- 計算的瓶頸:17 世紀的法國財政與天文學需要大量加減乘除——稅務帳目、天文曆法、軍事補給計算。 當時使用算盤(14 世紀由中國傳入)與計算尺,但算盤不會自動進位—— 人必須在心中處理「滿 10 進 1」,錯誤率極高。
- 第一個線索(父親的啟蒙):Pascal 的父親 Étienne 是稅務官(虔誠的冉森派), 稅收記錄的算術錯誤讓他痛苦不堪。1640 年他向兒子提出需求:「幫我算帳,不要再出錯。」
- Pascal 的偵探直覺(19 歲的關鍵頓悟):十進位制的進位可以被機械化—— 用一個「不完全轉一週」的計數器輪(odometer):
- 個位輪轉 10 圈 → 自動帶動十位輪轉 1 圈;
- 十位輪轉 10 圈 → 帶動百位輪;
- 餘數(remainer)制動器:低位輪回 0 時被「抬起」暫停,把進位量傳給高位。
線索與推理 -- 數學式、程式、理論#
第一條線索:進位制的數學#
十進位加法:
\[ 3 + 7 = 10 = 1\times10 + 0\times1. \]
若用 mod 10 計數器,低位輪只能表示 \(\{0,\dots,9\}\) :
\[ \text{counter}(n) = n \bmod 10,\qquad \text{carry}(n) = \lfloor n/10 \rfloor. \]
Pascaline 的每個齒輪就是一個 mod 10 的計數器 + 一個進位傳遞機構。
第二條線索:輪的數學結構(进制自動提升)#
五個輪 = 一個 5 維 mod-10 向量的硬體實現:
\[ \text{Pascaline} = \left(\mathbb{Z}_{10}\right)^5, \qquad \text{值} = \sum_{i=0}^{4} d_i \times 10^i. \]
- 個位輪(d0):轉 10 次 → 進位;
- 進位傳遞: \(d_i = 9\) 且 \(d_{i+1}\) 旋轉時, \(d_{i+1}\) 轉 1 格——餘數制動器在低位為 0(回歸點)時鬆開高位。
第三條線索:Pascal 的驗算(1645 年梅里茲證據)#
Pascal 將 Pascaline 的運算結果與官方公證人核對,並設計「檢驗程序」驗證每一步—— 「驗算」從此成為計算機設計的內建要求。
Python:進位計數器的模擬#
class Pascaline:
"""Pascaline 的現代模擬:5 位 mod-10 計數器 + 進位傳遞"""
def __init__(self, digits=5):
self.digits = digits
self.wheels = [0]*digits # 每個輪 = mod 10 計數器
def add(self, n):
"""n 為要加的 5 位數,模擬進位傳遞"""
carry = 0
for i in range(self.digits):
s = self.wheels[i] + n[i] + carry
self.wheels[i] = s % 10 # mod 10:低 3 位
carry = s // 10 # 進位傳給高位
return carry
def __repr__(self):
return "".join(map(str, reversed(self.wheels)))
# 99999 + 1 = 100000(溢出,5 位剛好繞回 0)
p = Pascaline()
for digit in [9,9,9,9,9]: p.wheels[0] = 0 # 預設
p = Pascaline()
p.wheels = [9,9,9,9,9]
print("99999:", p)
carry = p.add([1,0,0,0,0])
print("加 1 後:", p, "(溢出進位:", carry, "→ 繞回 00000)")
# 驗算:74 + 39 = 113
p2 = Pascaline()
p2.wheels = [4,7,0,0,0] # 074
p2.add([9,3,0,0,0]) # +39
print("74 + 39 =", p2, "(手算 113 ✓)")
99999: 99999
加 1 後: 00000 (溢出進位: 1 → 繞回 00000)
74 + 39 = 00113 (手算 113 ✓)
結案 -- 後果與影響#
- Pascaline(1642,5 位)與 1644 的 10 位版:商業化銷售(僅車削輪版本共 12 台留存至今)—— 第一台計算機產品。
- 進位制的機械化從此確立:所有後續計算機(Leibniz 的二進位、British 的十進位)都用進位邏輯。
- Pascal 的另一貢獻(1647–1654):建立機率理論( \(p(x) = \binom{F}}{f}\cdot\frac{f}{2^F}\) )—— 機率計算機與 Pascal 三角(Pascaline 的另一發明)——資料科學的起點。
- Leibniz 的立即接棒:Pascaline 的進位思想 → Leibniz 的二進位計數器(見「1673-Leibniz階乘計算機.md」)。
- 歷史定位:從 Pascaline 起,「計算」= 「把數字放進方孔、轉輪子」—— 而其進位制到今天仍是所有硬體的底層邏輯。
關鍵人物與文獻#
- B. Pascal:Pascaline (1642);機率理論與 Pascal 三角 (1654)。
- E. Pascal:稅務需求 (1640)——需求來源。
- 相關案件:
1673-Leibniz階乘計算機.md、1837-Babbage差分機.md。