從算盤到計算機,從十進制到二進制,人類計算能力的提升

從整個人類的發展史上看,我們的科技和生產力是以加速度的規律發展的。尤其是最近的一百多年時間裡,我們的加速度得到了前所未有的提升。在70萬年以前,周口店的“北京人”就已經會使用火了。在大約10萬年前,還是這片區域,山頂洞人已經能夠製作一些石器和裝飾品。在1953年西安的半坡村發現了一處古代母系氏族的遺址,其距今為5600~6700年。從出土的陶器上發現了22種可能是用來計數的符號。

從算盤到計算機,從十進制到二進制,人類計算能力的提升

牛頓在300多年前提出的牛頓力學依然是我們現在解釋宏觀世界物理現象的基礎理論。隨著《自然哲學之數學原理》的出版,開啟了現代科學飛速發展的時代。1873年的麥克斯韋發表了《電磁論》一書,奠定了完整的電磁理論才不多100多年。技術的飛速發展還體現在了我們現在強大的運算能力。

從算盤到計算機,從十進制到二進制,人類計算能力的提升

艾薩克·牛頓

我們先來思考這樣一個問題,從人類出現在地球上開始,直到現在,整個人類史進行了多少次算術運算?(算術運算指的是加、減、乘、除、開平方、開立方、求三角函數、解微分方程等。)當然,誰都不能統計出精確的值,我們只需要算出一個估算值即可。

從算盤到計算機,從十進制到二進制,人類計算能力的提升

我們在古埃及發現了公元前3000~前2500年的象形數碼,而我國的甲骨文中也出現過數字符號,這迄今為止也至少有4000年的歲月。所以我們可以認為人類進行算術運算的歷史不超過5000年。

從算盤到計算機,從十進制到二進制,人類計算能力的提升

殷墟發現的甲骨文

假設每個人每天會進行100次算術運算,那麼每個人每年就會計算36500次。那麼我們需要計算全球的人數,全球的人數在過去的幾千年裡由於技術原因和戰爭原因,一直緩慢增長,直到最近200年,數量上才突飛猛進的。在1804年全球人口總數才打到10億,到現在已經發展到了70億人口。我們可以認為5000年以來,平均每天會有0.5億人進行算術運算。我們不難得出:

5000*365*100*0.5*10^8=10^16

從算盤到計算機,從十進制到二進制,人類計算能力的提升

天河一號超級計算機

我們得出的這個估算值應該比實際值大很多,雖然它看起來是一個很大的數。但是跟現代科學遇到的大數相比簡直不值得一提。這個數只能估算到1943年,因為電子計算機的出現,使人類的計算能力有了一次質變,現在我們一秒鐘的計算次數就遠遠超過了10^16次。

曼哈頓計劃和卡片計算機

1939年愛因斯坦寫信給當時的美國總統羅斯福,他建議羅斯福重視原子武器的研究工作。隨後羅斯福撥款6000美元,“曼哈頓計劃”從此正式開展。曼哈頓計劃集合了當時世界上最優秀的一批數學家、物理學獎和工程師。在前期理論計算工作中,他們估算出他們所面臨的計算量要比人類有史以來全部的計算量還要多。這使得他們的研究陷入了困境,直到他們想起了IBM公司生產的卡片計算機。

從算盤到計算機,從十進制到二進制,人類計算能力的提升

參與“曼哈頓計劃”的部分科學家

19世紀50年代之後,美國的外來移民數量大幅增長,需要每10年做一次人口普查。1880年人口普查的數據,人工處理了7年,也就是直到1887年才得出結果。而1890年又會進行一次新的人口普查,這時人們意識到,隨著人口的增加,也許這次直到1900年也未必會處理完1890年統計的數據。在這種情況下,紐約州布法羅城的統計員赫勒里斯發明了卡片計算機。雖然1890年的人口數量比1880年時多了1200萬,但藉助於卡片計算機,僅僅用了兩年多就處理完畢了。

從算盤到計算機,從十進制到二進制,人類計算能力的提升

穿孔卡

卡片計算機是一種複雜的電機械設備。它與現在的計算機不同,它只能執行“固定程序”的計算。使用它之前需要將需要計算的數據穿在卡片上,效率低下。經過多次改進,後來形成了“卡片程序計算機”,這時它能運行“外部程序”了,它不僅能把數據穿在卡片上,還能把“程序”也穿在卡片上。

從算盤到計算機,從十進制到二進制,人類計算能力的提升

其實我們身邊有很多種外部程序控制的機器設備。例如,用來編織各種紡織物的機器。它們通過穿孔紙帶上不同的數據,編織出不同圖案的紡織物。

由於卡片機的使用成本比較高,通常IBM公司會給租用卡片機的客戶配備技術人員,協助安裝與調試,使其能夠正常工作。當時曼哈頓計劃的領導人向IBM公司租用了一臺卡片計算機,並從歐洲調回了一位合乎保密要求的技術人員來調試該機器。但是當這位技術人員千里迢迢趕到機房時吃驚的發現,這臺使用複雜的機器已經正常運轉起來了。原來是幾位年輕的理論物理學家,包括後來得了諾貝爾獎的理查德·費曼,已經根據說明書自己動手開箱安裝完成了。其中有幾位年輕的物理學家對這臺機器產生了濃厚的興趣,他們為後來計算物理學的發展做出了巨大的貢獻。

從算盤到計算機,從十進制到二進制,人類計算能力的提升

理查德·費曼

卡片計算機能夠在7秒內完成一次乘法。以這個速度應對曼哈頓計劃還是太慢了,所以只能同時使用大量的計算設備。數學家馮·諾依曼也參與了曼哈頓計劃,他看到了用數值方法解決重大實際問題的前景,但是速度卻有限,他極度迫切的想要提高當時的計算速度。要想提高計算速度,首先要明確是什麼限制了當時的計算速度。

影響計算速度的原因

人類也做過多次手工計算大規模數據的工作,比如大地三角測量和天文測量數據的處理。大數學家高斯花費了10年時間去完成漢諾威王國的大地測量,他曾用幾天時間求解一個包含55個未知數和300個條件方程的最小二乘法計算。如果測量更廣大的區域,那麼未知數和條件方程就會更多,使計算的時間變的越來越長。

從算盤到計算機,從十進制到二進制,人類計算能力的提升

數學王子——高斯

這種情況下,數學家通常會把這些重複但是耗時的計算交給一批計算員去做。計算員的工作分為以下幾個步驟:

  1. 首先設計一張縱橫表,它反映出每一步基本運算的過程和得出最終結果的順序,以及保證結果的檢驗方法。
  2. 然後把數據填入表中列和行的相應位置上。
  3. 按照行和列依次計算結果。例如:把第一行的每個數求餘弦填入第三行,把第二行的每個數求立方填入第四行,再把第三行的每個數除以第四行相應的數填入第五行,等等類似的操作。

人們總結出了大規模結算過程中的大致流程。

  1. 要有一張表格記錄著原始數據、計算過程中的數據和計算的結果。它起到了“存儲器”的作用,也記錄了計算過程。
  2. 具體的兩個數的求值過程,比如上個例子中兩個數相除可以用算盤和手搖計算器。這些工具就是“運算器”。
  3. 上例中計算員在計算求餘弦和立方時要查閱相關的數學用表,例如《巴羅表》。這其實是一種數據庫,它保存著已經計算的大量數據,不用重複計算,結果直接查表可得,提高效率。
  4. 計算員的執行步驟,他從表中讀取數據,經過2、3步後將結果寫入表格的相應位置,計算員充當起了“中央控制器”的作用。
從算盤到計算機,從十進制到二進制,人類計算能力的提升

手搖計算器

從這些流程可以看出,要想提高計算速度,就要提高每一步驟的速度。僅僅提高一個步驟的速度,效果甚微。比如把算盤或者手搖計算器換成當今的電子計算器,雖然完成求餘弦和立方的計算時間大大縮短了,但整個計算過程還是很慢。這個問題還存在今天的計算機,現在的計算機CPU的計算速度遠遠快於內存的讀寫速度。要想提高所有流程的速度,首先就要實現自動的邏輯控制。否則每一步驟的速度很快,但是每個步驟間的流程控制很慢也是於事無補的。所以我們要做到一旦計算開始,就要避開一切人為干預,直到自動運算出最終結果。

數的進制和存儲

既然要做到機器全部自動運算,那麼首先要解決的問題就是如何用機械或者電氣元件來保存數據。

我們在小時候學習計數時,都是掰著手指進行計數,所以熟練使用十進制已經深深刻在了我們的腦海裡。其實還存在一種更簡單直接的進制,那就是反映“有無”、“正負”、“高低”、“真假”這種關係的二進制。二進制是一種簡單的方式,因為任何一個具有兩種狀態的物理過程,都可以用“有”和“無”,或者1和0來表示。把1和0組合起來可以表示我們熟知10進制的任何數。例如,從0到16的十進制數用二進制寫出來就是:

0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000

二進制是很容易理解的數制,十進制乘法裡的“九九表”,在二進制中只剩下“一零得零,一一得一”兩句口訣。

二進制在一個位置上用0和1兩個符號實現0和1兩個數。如果在兩個位置上各用0和1兩個符號實現0,1,2,3四個數,就構成了四進制。八進制則用三位二進制數,實現0,1,2,3,4,5,6,7八個數。同理,用四位二進制可以實現十六進制,不過這時普通的數碼不夠用了,要以A,B,C,D,E,F來分別代表10,11,12,13,14,15。

二進制:10000=2^4=16

四進制:10000=4^4=256

八進制:10000=8^4=4096

十六進制:10000=16^4=65536

任何進制都可以翻譯成十進制,例如

10201=10000+2*100+1=3^4+2*3^2+1=100

最早用二進制組合出四進制和八進制的記載,應當認為是我國傳說中的“伏羲八卦圖”。伏羲用“—”和“--”兩種符號拼成了八卦。

從算盤到計算機,從十進制到二進制,人類計算能力的提升

伏羲八卦圖

這麼多進制方式,我們應該選取哪種方式呢?用三位十進制能表示數的個數是10^3-1=999,而用三位二進制能表示111=2^3-1=7個數字。同理,用n位k進制能表達數字的個數是:k^n-1

假設每一位上的k進制數碼0,1,2,3···k-1都各要用一個“狀態”來實現,而且n位k進制寄存器的成本c正比於狀態的總數kn。要求以成本c=kn最小,而所能表示數字最多個數=k^n-1=為指定常數,來確定k的值。這是帶一個“約束條件”的優化問題,它很容易求解。把成本對k微分,應有

從算盤到計算機,從十進制到二進制,人類計算能力的提升

再對約束條件微分,求得

從算盤到計算機,從十進制到二進制,人類計算能力的提升

代入前面的式子,得到決定k的關係式

從算盤到計算機,從十進制到二進制,人類計算能力的提升

即k等於自然對數的底e=2.71828··· 最接近e的整數是3,於是三進制應該是最優選擇。但是具有三個狀態的元件必須專門設計,能給出兩個狀態的物理效應比比皆是。2是最接近e的另一個整數,這是使用二進制是另一個大理由。

現在二進制廣泛應用在我們身邊的各種計算機中,可以說現在我們的世界一秒鐘都不能離開對二進制的依賴。正是二進制的高效,才會有今天更加強大的計算能力。


分享到:


相關文章: