摘要 介绍历史上由于计算精度问题引起的灾难或事件。
今天换个话题,说说历史上曾经发生过的一些事件。
- 1961 年 , 美国麻省理工学院气象学家洛伦兹在仿真天气预报时 , 将 0.506127 舍入到 0.506 , 所得计算结果大相径庭 ! 这种“差之毫厘 , 谬以千里”的现象导致他不得不发出感叹:南美洲亚马逊河流域热带雨林中的一只蝴蝶 , 偶尔煽动几下翅膀 , 可能在两周后引起美国德克萨斯的一场龙卷风 ( 即“蝴蝶效应” )
- 1967 年 , 统计学家 James Longley 通过手工和几个回归软件包对 1947 年至 1962 年共 16 年的“国民生产总值 (GNP) ”、“人口”等数据进行了“就业”的回归分析 . 结果发现软件包给出的答案错得离谱 (drastically incorrect answers)
- 1982 年 , 温哥华证券交易所推出一项股票指数 , 其初值设定为 1000.000. 在经济并无衰退的 22 个月后 , 指数跌到了 520. 正确指数是 1098.892. 软件在计算时 , 多次从小数点后第 4 位开始截断 , 只保留了 3 位小数
- 1987 年 , 英国政府发现由于软件的舍人误差导致对过去的 21 个月的通胀低估了 0.1%. 这意味着与通胀挂钩的养老金测算系统的计算有误 , 因此不得不重新计算养老金 , 并紧急给超过 9 百万的客户做补偿 , 总金额达上亿英镑
- 1991 年 2 月 25 日 , 在海湾战争中 , 美军爱国者导弹防御系统未能拦截一枚来犯的萨达姆导弹 , 造成美军士兵 28 名死亡 , 98 人受伤 . 此次拦截失败的原因在于实数的不精确的二进制表示所造成的舍入错误累积所致 . 爱国者导弹控制系统的系统时钟采用 24 位寄存器存储时钟值 0.1 秒 , 这种编码方式造成 0.000000095 秒的误差 . 由于这种微小误差的存在 , 导致系统长时运行的累积误差达 0.34 秒 , 进而使得拦截失败
- 1991 年 8 月 23 日 , 挪威的海上油气平台 Sleipner 在建设的最后阶段沉没了 . 原因是由于工程师在使用有限元软件 NASTRAN 计算时的精度不够 , 导致平台的压力被低估了 47%. 最终损失达 7 亿美元
- 1994 年 10 月 , 一位数论研究者发现 Pentium 处理器存在除法错误 . 比如 4195835/3145727, 只能精确到小数点后 3 位小数 , 第 4 位小数是错的 . 此次事件导致 Intel 公司召回其 CPU, 损失 4 亿 7500 万美元
- ...
说古鉴今,今天或将来如何避免类似事件的发生?
内容或涉及的文献请参考:
[1] 赵世忠. 算术表达式的一种可信计算算法及其软件ISReal(含有补充材料的版本). 中国科学F辑: 信息科学, 2016, 46(6): 698-713