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