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