1946 - ENIAC#
案件摘要#
1946 年 2 月 14 日,世界第一台通用型電子計算機 ENIAC 在賓州大學公開。它用 18000 個真空管把計算速度提升到每秒 5000 次加法,是機械計算器的千倍以上——但它「用插線寫程式」,也因此催生了後來的儲存程式革命。
前因 -- 為什麼會有這個案子#
- 二戰期間,美國陸軍彈道研究實驗室(BRL)需要快速計算火砲的「射表」(firing table)。
- 每張射表要對數百個仰角/距離組合積分彈道微分方程,人類計算員(human computer,多為女性數學家)用桌上計算器算一條彈道要 20–40 小時。
- 原有的 Bush 差分分析儀(機械式)速度與精度都不夠。
彈道微分方程(忽略阻力的簡化形式):
\[ \frac{d^2 y}{dt^2} = -g, \qquad \frac{d^2 x}{dt^2} = 0 \]
完整版還要考慮空氣阻力 \(F_d = \tfrac{1}{2}\rho v^2 C_d A\) ,是非線性 ODE,無法查表求解,只能數值積分。
線索與推理 -- 數學式、程式、理論#
規格與規模#
| 項目 | ENIAC |
|---|---|
| 真空管 | 約 17,468–18,000 支 |
| 重量 | 約 27 噸 |
| 佔地 | 約 167 m² |
| 耗電 | 約 150 kW |
| 加法速度 | 5,000 次/秒 |
| 乘法速度 | 約 357 次/秒 |
| 記憶體 | 20 個累加器,每個 10 位十進位 |
ENIAC 用十進位而非二進位(以 10 個位元的觸發器環表示一個十進位數字),加法本質上是環計數:
\[ x + y \Rightarrow \text{pulse}(x) \text{ 驅動 accumulator 從 } y \text{ 計數 } x \text{ 次} \]
插線程式與打孔卡#
- 程式「寫」在實體接線板上:用纜線把單元(累加器、乘法器、函數表)連接成資料流,再用開關與旋鈕設定。
- 資料與部分常數由 IBM 打孔卡輸入。
- 程式設計師(Kathleen McNulty、Jean Jennings Bartik 等六位女性)要修改程式得重新配線,設定一次可花一至數天。
\[ T_{\text{設定程式}} \approx 1\text{–}3\ \text{天} \gg T_{\text{執行程式}} \approx \text{秒}\text{–}分鐘 \]
每秒 5000 次加法 vs 人類計算員#
人類計算員用機械計算器約每秒 0.5 次加法,ENIAC 快 10,000 倍:
\[ \frac{5000\ \text{add/s}}{0.5\ \text{add/s}} = 10^4\times \]
一條彈道從 30 小時縮短到約 30 秒——快 3600 倍。
von Neumann 的加入與 EDVAC#
- 1944 年,數學家 von Neumann 在往來華盛頓的火車上偶然得知 ENIAC 計畫,隨即以顧問身份加入。
- 他關心的是 ENIAC 能否用於氫彈相關的可壓縮流體力學計算,發現「改程式要重新插線」是致命瓶頸。
- 1945 年他寫下《First Draft of a Report on the EDVAC》,提出儲存程式架構;EDVAC 於 1949–1951 年運轉,用汞延遲線記憶體同時儲存指令與資料。
Python 對照:數值積分算彈道#
# ENIAC 用數值積分算彈道;這裡用歐拉法重現該計算(無阻力版)
g, dt = 9.8, 0.001
x = y = vx = vy = 0.0
v0, theta = 300.0, 45.0 # 初速 300 m/s、仰角 45 度
vx, vy = v0*0.7071, v0*0.7071
while y >= 0:
x += vx*dt; y += vy*dt
vy -= g*dt
print(x) # 約 9180 m;ENIAC 幾秒內可對數百個參數組合重複此計算
結案 -- 後果與影響#
- ENIAC 證明了「全電子、通用」計算機的可行性,是電腦時代的起點。
- 「程式即插線」的痛苦直接催生了 stored-program 概念,把程式變成可儲存的資料——軟體產業的種子在 ENIAC 的接線板上萌芽。
- ENIAC 後期由 Adele Goldstine 等人發展出把指令存入函數表的初步「程式儲存」技術,顯示革命已在體內發生。
- 計算從軍事(彈道、氫彈模擬)擴散到氣象、工程與商業,開啟了「計算萬能」的時代精神。
關鍵人物與文獻#
- J. Presper Eckert、John Mauchly:總設計師,之後創辦 Eckert–Mauchly Computer Corporation(UNIVAC)。
- John von Neumann:顧問,EDVAC 報告作者。
- 六位 ENIAC 程式設計師:Kathleen McNulty、Frances Bilas、Jean Jennings Bartik、Ruth Lichterman、Elizabeth Snyder、Marlyn Wescoff——史上第一批程式設計師。
- 文獻:Goldstine, H. & Goldstine, A., "The Electronic Numerical Integrator and Computer (ENIAC)", Mathematical Tables and Other Aids to Computation, 1946。