離散化,用矩形面積求和近似積分。但問題可能出在兩個地方。”陸沉分析道,“第一,離散步長。這個函式在初始階段變化劇烈,後面衰減平緩。用固定步長,要麼前面精度不夠,要麼後面浪費計算。可以考慮用自適應步長,變化快的地方步長小一點,平緩的地方步長大一點。”
劉宇若有所思:“自適應……就像用顯微鏡看細胞,密集的地方多看幾眼,稀疏的地方少看幾眼?”
“對。第二,舍入誤差。BASIC用的是單精度浮點數,有效位數有限。連續加和很多小數時,誤差會累積。你可以試試用雙精度變數,如果BASIC支援的話。或者,改變求和順序,先加絕對值大的數,再加小的,能稍微減少誤差。更根本的辦法,是換用數值穩定性更好的演算法,比如辛普森積分法,但實現起來復雜些。”
陸沉一邊說,一邊在8086上快速寫了個簡單的雙精度累加示例,演示誤差累積。
又簡要介紹了辛普森公式的思想。
劉宇聽得非常專注,在筆記本上飛快記錄。
“數值計算……誤差分析……演算法穩定性……”劉宇喃喃道,彷彿開啟了一扇新窗戶,“我原來只覺得數學是公式和定理,沒想到用到計算機上,還有這麼多講究。”
“數學是理論,計算機是實現工具。兩者結合,才能解決實際問題。”陸沉說。
這正是他一直以來秉持的理念。
解決了三個人的問題,窗外天色已暗。
孫鵬心滿意足地回去除錯他的坦克,陳浩抱著他那張CPU流水線工廠圖如獲至寶,劉宇則若有所思地捧著筆記本離開了。
陸沉坐回8086前,準備繼續自己的學習。
然而,就在他敲下幾個命令後,顯示器突然一黑,主機風扇的嗡鳴聲也戛然而止。
停電了?不,頭頂的日光燈還亮著。
陸沉心裡一沉,立刻檢查主機背後的電源線,插緊了。
按下電源開關,毫無反應。
他趴到桌子底下,看向插座——指示燈是亮的,有電。
問題出在主機電源上。
他關掉插座開關,拔掉主機所有連線線,拿出宋師傅給的那套螺絲刀,小心地擰開主機箱側板的螺絲。
機箱內部展現在眼前,落著一層薄灰。
電源是一個方形的鐵盒子,位於機箱後部上方。
他湊近聞了聞,沒有焦糊味。
但剛才斷電太突然,像是某種保護機制動作了。
他仔細檢查電源輸出到主機板的那個最大的介面,針腳沒有彎曲或燒灼痕跡。
主機板上的電容也沒有鼓包。
難道是電源本身的問題?
陸沉沒有貿然去動電源模組(那東西內部有高壓電容,危險)。
他想起之前蘋果II電容鼓包的事,也想起宋國棟說過,電器突然罷工,有時不是大毛病,可能是某個接觸點鬆了,或者保險絲斷了。
這臺8086 PC是學校寶貴的資產,不能亂拆。
他決定先記錄下來。
他拿出自己的筆記本,畫下主機內部佈局,標註電源、主機板、軟碟機、硬碟(如果有)的位置,記下故障現象:正常使用中突然斷電,無任何先兆,無異常氣味。
再按電源鍵無反應。
插座供電正常。
初步判斷電源模組或主機板供電電路故障。
需專業檢測。
合上筆記本,他將機箱側板暫時裝回。
看來今晚的學習計劃要擱溋恕?
他收拾好東西,鎖好裡間和外間的門,離開機房。
第二天一早,陸沉就找到張老師,彙報了8086 PC機故障的情況,並遞上了自己記錄的故障現象和初步判斷。