金钟河
1982年1月,温哥华证券交易所公布了新的股票指数。该指数的初始值是1000.000,22个月后,股票指数滑到了520左右。这段时间没有发生過大的经济萧条或外汇危机,股票指数为什么缩水了一半呢?
股票指数是在证券交易所上市的所有股票售价的基础上进行核算的。计算机每天平均要对股票价格进行2800次左右的计算和更新,计算时会保留小数点后3位。
当时,温哥华证券交易所的计算机软件计算股票指数时,没有将小数点后第四位进行四舍五入,而是直接舍去。
如股票指数540.32567,计算机会去掉小数点后第三位之后的数字,这样,最终结果就变成了540.325。相反,如果四舍五入,股票指数就是540.326。
一次计算中,直接舍去和四舍五入,只产生0.001的差异。但这种差异,每天少则累积几百次,多则几千次。
这种差异不断累积,终于导致股票指数开始下滑。
温哥华证券交易所的股票指数,与小数点后第四位数字四舍五入的正常值相比,每天都会下滑1到2个百分点。22个月过去后,股票指数与刚开始相比,几乎差了一半。
最终,温哥华证券交易所承认,是计算机软件计算股票指数时出现了问题。
他们公布了新的股票指数,并对之前22个月的交易记录重新进行了核算。结果显示,股票指数从524.81上升到了1098.892,几乎多出一倍。
软件bug(缺陷)并不大,它引发的后果却十分骇人。
(摘自人民邮电出版社《致命Bug:软件缺陷的灾难与启示》)