金鐘河
1982年1月,溫哥華證券交易所公布了新的股票指數(shù)。該指數(shù)的初始值是1000.000,22個月后,股票指數(shù)滑到了520左右。這段時間沒有發(fā)生過大的經(jīng)濟(jì)蕭條或外匯危機(jī),股票指數(shù)為什么縮水了一半呢?
股票指數(shù)是在證券交易所上市的所有股票售價的基礎(chǔ)上進(jìn)行核算的。計算機(jī)每天平均要對股票價格進(jìn)行2800次左右的計算和更新,計算時會保留小數(shù)點后3位。
當(dāng)時,溫哥華證券交易所的計算機(jī)軟件計算股票指數(shù)時,沒有將小數(shù)點后第四位進(jìn)行四舍五入,而是直接舍去。
如股票指數(shù)540.32567,計算機(jī)會去掉小數(shù)點后第三位之后的數(shù)字,這樣,最終結(jié)果就變成了540.325。相反,如果四舍五入,股票指數(shù)就是540.326。
一次計算中,直接舍去和四舍五入,只產(chǎn)生0.001的差異。但這種差異,每天少則累積幾百次,多則幾千次。
這種差異不斷累積,終于導(dǎo)致股票指數(shù)開始下滑。
溫哥華證券交易所的股票指數(shù),與小數(shù)點后第四位數(shù)字四舍五入的正常值相比,每天都會下滑1到2個百分點。22個月過去后,股票指數(shù)與剛開始相比,幾乎差了一半。
最終,溫哥華證券交易所承認(rèn),是計算機(jī)軟件計算股票指數(shù)時出現(xiàn)了問題。
他們公布了新的股票指數(shù),并對之前22個月的交易記錄重新進(jìn)行了核算。結(jié)果顯示,股票指數(shù)從524.81上升到了1098.892,幾乎多出一倍。
軟件bug(缺陷)并不大,它引發(fā)的后果卻十分駭人。
(摘自人民郵電出版社《致命Bug:軟件缺陷的災(zāi)難與啟示》)