彭民德:《電子計算60年》 (3)學習計算數學跟未來結緣

彭民德發表於2016-05-31

電子計算機本來意義是數學計算的電子自動裝置,是電子計算的平臺。電子計算技術既包括作為計算平臺的計算機,也包括計算數學。計算平臺固然重要,電子高速自動計算更需要計算方法的引領,將連續量的計算轉化為近似的離散量的計算。要對計算做出合理的規劃和對計算步驟的掌控,才能獲得準確的結果。計算機所做的工作都可以叫做計算,計算數學是數學的重要組成部分,是數學在離散量方面的重大發展。

歷史上許多數學家都重視計算數學,對電腦科學理論和結構實現,做出過開創性工作。比如,計算機大量採用的邏輯運算,“與”、“或”、“非”運算的理論基礎,是英國數學家布林的布林代數。後來美國數學家夏農發表《繼電器開關電路的分析》,建立起布林代數和繼電器開關電路之間的聯絡,將布林代數引入到電腦科學領域。夏農還首次提出“資訊”的概念,給出資訊量計算公式,闡述《通訊的數學基礎》,被公認為資訊理論之父。提出並解決計算機可計算理論的,是英國數學家圖靈,他設計了現代計算機的最初模型──圖靈機。這種機器儲存程式,可以有控制地執行程式,他設計了一臺計算機ACE。還提出了著名的,判定計算機是否有智慧的“圖靈測試”。為了紀念他對計算機理論開創性的貢獻,美國計算機學會將它的最高獎以圖靈命名,這實際上是沒有諾獎的當代計算機界最高獎。被譽為“計算機之父”的是匈牙利籍數學家馮•諾依曼,是他具體給出了計算機五大部件結構,即計算機由“儲存器、運算器、控制器、輸入裝置、輸出裝置”組成的“馮•諾依曼體系結構”,並按照這種結構造出了被公認為世界上第一臺電子計算機ENIAC。控制論鼻祖維納,在創立控制論的同時,對電腦科學也有重大貢獻,是計算機人工智慧領域的開拓者,他也是美國的一名數學家,還寫了《我是一個數學家》的自傳。用於通訊校驗的海明碼,發明人海明就是美國傑出的數學家。我國知名數學家華羅庚先生,是在任中科院數學研究所所長期間,1956年組建了中科院計算技術研究所。王選院士說,計算機本身就是數學和電子學結合的產物。圖靈獎的獲獎人,或者是數學出身,或者有很好的數學修養,幾乎無一例外。他也分析了,我國計算機領域獲得國家自然科學獎的科學家中絕大多數為數學出身,獲得國家科技進步二等獎以上的主要獲獎人中,很多人也是數學出身。(參閱《王選文集》P129-130,北京大學出版社,2006年4月)

1956年,國家高層發出“向科學進軍”的號令,制定了《1956-1967年科學技術發展遠景規劃綱要》,是中國科技發展有里程碑意義的一年。規劃制定了“重點發展,迎頭趕上”的方針,吹響了向科學進軍,迎接電子計算新紀元的號角。中國的電子計算事業,在高層精心規劃和組織中誕生。1956年是我國電子計算的元年,電子計算機及其應用被列入國家最優先發展的位置。

規劃的第41項任務是“計算技術的建立”,任務要求“必須加快地建立作為這些新技術的基礎的理論學科,包括:…控制論、統計數學、計算數學、電子學、無線電物理、半導體物理等”。在重點關注的八個學科中,數學和計算數學是第一個。指出: “十二年內首先要儘快地把數學中一些重要、急需而且空白或薄弱的部門(包括計算數學、…...)大力發展起來”。計算數學是20世紀中葉電腦科學的重要方向,它強烈地推動著計算技術的發展。

接著便組織力量,在高校開辦專業,培養有紮實數學和計算數學知識,掌握計算機理論基礎,能夠使用計算機從事電子計算專門工作的人。從北大等學校開始,成立計算數學專業。而且為了縮短培養週期,一般都從高年級學生中抽調到這個專業來。國家最高科學技術獎獲得者,漢字鐳射照排之父王選院士,就是我國最早的計算數學專業學生的代表,當北大1956年成立計算數學專業時,已經是北大54級數學專業三好學生的他,毅然選擇了計算數學。由中國計算機學會後來設立的,我國計算機學界最高獎,被命名為“王選獎”。

筆者也在自己的學校有幸趕上了我們國家這個第一撥。武漢大學在做好了必要的準備工作後,1959年從數學專業57級的近百名學生中,抽調11人,組成了計算數學專業班。青春年華處在祖國召喚,科學強國的年代,選擇了新的計算數學專業,跟電子計算機結緣,那便是選擇了跟未來結緣。

三門主要專業課程是“計算方法”、“計算機原理”、“程式設計”。我最喜歡“計算方法”,因為它把深奧的數學理論跟現實的應用聯絡起來了。它告訴我們,在工程上用到無理數π時,什麼情況下用3.14,什麼時候必須用3.1416。它講怎樣把連續量轉化為數字量。講測量資料的誤差,計算中誤差的傳播和截斷,它講許許多多求數學問題數值解的方法。比如多種求圓周率的方法,多種求三角函式數值的方法。怎麼解高階方程?怎麼解線性方程組?還有種種以數學家命名的常微分方程數值解法,偏微分方程數值解法。基本的方法是用差分去逼近連續量的變化,在保證計算方法是收斂的前提下,用控制迭代的方法,使所求的量逐步逼近連續量,當誤差精度已經達到某個認可的範圍,當前的數字量就是所要求的解。採用的教材是由北京大學、吉林大學、南京大學計算數學教研室編寫的《計算方法》一書。

《計算機原理》講儲存程式的馮•諾依曼結構,組成計算機的五大部件。其中,儲存器是中心,儲存程式和資料,並且經匯流排跟各個部分連線起來。能夠儲存程式並且能夠自動執行程式,是馮•諾依曼結構跟以往的電子計算裝置的基本不同點。這門課講儲存器怎樣儲存0與1的二進位制數,講運算器和控制器何以執行指令。講一條指令的執行過程,之後怎樣確定下一條指令並把它從儲存器調過來,接著執行。講二進位制,要講與、或、非門和邏輯運算,這些基本知識從數學層面上跟現在的講法差不多。但在實現上當時是電子管機,還要從電子管的單雙穩態電路、觸發器講起。雙穩態電子線路的兩種穩定狀態可以分別代表0與1,並能夠在一定條件下用脈衝訊號實現翻轉。好在此前已經由物理系的老師上過“無線電電子學”,對二極體、三極體的特性,對放大器、振盪器、單雙穩態電子線路等已有所瞭解,所講內容基本上能聽懂。

《程式設計》講怎樣在蘇聯的M-3計算機上程式設計序,使用由北大、復旦、南大計算數學教研室編的《程式設計》。為了利用計算機做電子計算,發揮其自動計算的功能,專業人士必須學會編制程式,在計算機上實現適當的計算方法。為了編制程式,必須深入瞭解電子計算的特點,熟悉計算機的指令系統和程式設計方法。

跟以往的計算相比,電子計算除了速度快以外,還有幾個顯著的特點。

一是其計算的場所不再是紙上,也不是算盤或者計算尺和手搖計算機上,而是在計算機的運算器裡。執行指令進行計算時,要跟儲存器打交道,從儲存器裡取數,把運算結果存到儲存器裡。

二是要對記憶體作出佈局規劃,指令放在哪裡,資料放在哪裡,每個單元的使用始終都得心知肚明。計算中保持正確的記憶體定址定位,設計每條指令時,凡是跟資料存取有關的,都必須要有準確的記憶體定址。

三是計算中要儘量用累加器和暫存器,因為對它們的操作,要比對記憶體操作速度快。

四是指令是逐條地被計算機自動執行的,為了保證執行順序的正確性,必須合理地設定邏輯運算,安排必要的跳轉和返回。任何一臺計算機的指令集都有一組這類指令,諸如無條件轉移和若干種計算轉移。而計算轉移又會有大於轉、等於轉、小於轉等等。具體轉向哪裡要依據剛進行的計算來決定。

五是記憶體單元的資料有“取之不盡,一衝就垮”的特性。因此可以把一些計算中常用的常數,存放在比較容易訪問的地方。一些要多次進行的計算,可以寫成“運算元”,後來叫做子程式的形式,提供呼叫,可以節省空間,提高效率。

鑑於上述一些特點,一個人能夠寫出上千行的實用程式,必須要有若干年的摸爬滾打,經受多方的挫折和磨練才行。在學校學習這門課程,只是開個頭。

投入到計算機數學知識的海洋,同樣有無盡的春色。首先,它也有了前人許多知識的積累,一些卓有貢獻的數學家,都有計算的趣話。高斯很小就顯示超人的數學計算才能,他10歲時,數學教師要求學生將1到100這100個數相加起來。老師剛解釋完題目,高斯就用簡便演算法得出了答案5050,令在場的同學和老師讚歎不已。經常接觸的與高斯的名字有關的計算方法有:求代數方程的數值解、解線性方程組的高斯消去法、用於處理實驗資料的最小二乘法。牛頓也有近似計算積分的牛頓法。又比如解常微分方程,有用數學家命名的尤拉折線法,龍格-庫塔法,等等,這些已經讓人目不暇接。數學家們這些數值計算成果,只要再用某種編制程式的語言,將它們寫成程式、分程式,以後叫做過程、函式等為計算機可以實現,可以重複使用的演算法,種種數學上的數值方法,就都成了可以用計算機自動求解的方法了。那麼運用到實際問題中,必將產生不可估量的價值。

其次,這又是一門新科學,特別是將與電子計算機珠聯璧合協同發展的一批科學,比如自動控制、導彈彈道計算、航空航天、生命科學等都有著強大的生命力。它們依賴於計算技術,又反過來推動計算技術的發展。

為與電子元件開關特性相適應,計算機中用二進位制表示數,使用二進位制數學。對二進位制雖然一時不習慣,但是在標記記憶體地址、計算儲存容量的場合要用到,所以必須掌握。其實也有規律可循。甚至在日常運用中,需要計算折半或者翻倍的場合,比用十進位制還來得更為方便。因為一個數的折半就是小數點右移一位,1的一半(1/2)是0.1, 再一半是0.01。做8次折半的話,唯一的一個1處在小數點後第8位,前面7位都是0,這個數一定是0.00000001。1的2倍是10, 再2倍(22)是100,要是做8次翻倍(28)的話,唯一的一個1處在第8位,其餘都是0,這個數一定是100000000。

假若要定量地分析我國古代【莊子•天下篇】中的一句話:“一尺之錘,日取其半,萬世不竭”,這是尺子長度的折半問題。能否估算一下,大約多少天之後,“一尺之錘”所餘不足萬分之一尺?計算機領域的人都知道,213是8192,214是16384,故14天后,長度只是二進位制表示的唯一一個1處在小數點後第14位的那麼個數,即10進位制小於萬分之一的1/16384。很容易就得到答案為第14天后,所餘不足萬分之一尺。

又比如說,一條繩子對摺一次後從中間剪斷,這條繩子便被分成3段,即2+1段。如果對摺兩次後剪斷,則繩子被分成了5段,即22+1段。對摺n次再從中間剪斷,將得到2n+1段。這是個倍增問題,每多對摺一次,原則上繩子的分段數加倍。用二進位制表示時,對摺一次後剪斷,繩子將被分割成11段,對摺兩次後剪斷,繩子將被分割成101段。那麼對摺n次後剪斷,繩子的段數一定是這樣一個二進位制數:兩個1中間夾有n-1個0,不用計算就可以把答案直接寫出來。

進入計算機的01世界,跟我們既往已經熟悉的數學世界相比,同樣需要嚴謹的治學精神。0與1似乎離得很近,是一對互為依存的孿生兄弟,對於某個數精度的取捨,到了某個範圍後,二者只在相差毫釐之間,用0用1都無所謂。但是它們往往又代表著對立的兩級,水火不相容。一個向左一個向右,或者一個為真一個為假,或者一個代表將某臺裝置開啟,另一個卻表示關閉。

基於電子計算機的計算技術太神奇了,雖然當時編制解任何數學問題的程式都很艱難,但是一旦程式編制好了,計算機就能夠忠實地、快速地執行,也可以自動重複執行。只要能夠寫出計算1到10這10個數相加的程式,就很容易做任何連續的n個數相加。只要會做1到10這10個數連乘的程式,就可以進而求任意整數n的階乘。人們要做的只是簡單地修改程式中變數的初值、終值和迴圈次數,一切都交由計算機去自動和快速完成。而且只要把程式中的邏輯計算設計好,執行完當前計算後,機器可以自主地順序或者跳轉到適當位置執行。計算機實現了計算的快速地、自動地進行,這就註定了計算機有強大的生命力。

計算機於計算人就像車床之與車工那樣密不可分,不過這裡科技含量更高,技術理論更復雜罷了。我們有責任圍繞計算機以新的計算技術為國家建設服務,並不斷充實完善這種技術,使服務效率得到改善。

不過,計算機的小荷才露尖尖角,只在美歐和蘇聯才有。當時我國剛剛引進來自蘇聯的計算機,由此從零起步開始了電子計算事業的發展。

(與本文相關的更多內容,可參看 彭民德《電子計算60年》第1章 電子計算新開紀元 電子工業出版社)

相關文章