世界上最贵的bug
一个价值8.7亿美元的bug
一位资深程序员曾经说过:
没有经历过 P0级错误的职业生涯
上面这句话是我编的,但是作为一个程序员,bug 绝对不足为奇。
你的bug给公司造成了多大的损失?在这篇文章中,我们来看一个导致8.7亿美元损失的错误。
整个事故:
1996年6月4日,第一枚阿丽亚娜5号火箭在法属圭亚那沿海发射。
这次发射耗资3.7亿美元,火箭搭载了一颗价值5亿美元的通信卫星,总投资为8.7亿美元。
起飞后37秒,火箭朝错误的方向转了90度,助推器在空中撕裂,飞船被一个巨大的液态氢火球吞没。
爆炸发生时,工程师甚至用法语报告说: “一切设置正常,轨道正常。”
主控室里威严的工程师和人群后面的骚动表明这一切发生得太突然了。
这场灾难性的事故引发了公众的调查,由于火箭携带的卫星受损,关于地球磁层运行的科学研究被推迟了近4年。
阿丽亚娜5号事故被广泛认为是最昂贵的历史bug之一。
事故原因
此事故的原因是浮点溢出。
用于应用的阿丽亚娜火箭包含一个决定火箭向上或向下的变量,称为水平偏差,以下简称为 BH。
在设计阿丽亚娜5号上一代火箭阿丽亚娜4号时,工程师分析了 BH 的边界条件,以确定哪一个永远不会超过16位整数表示范围(- 32768到32767) ,这个变量被定义为16位整数类型。
但是,由于阿丽亚娜5号火箭性能的改善,在大多数应用中,BH 被定义为64位浮点数,有些部分由于阿丽亚娜4号16位整数的疏忽仍在使用。
当这两部分代码组合使用时,它将尝试将一个64位浮点数赋给16位整数。
在火箭上升的头几秒钟,火箭的加速度非常低,所以这两个值之间的转换是成功的。
令人绝望的是,随着火箭加速度越来越高,当值超过16位整数时,就会发生溢出。
在正常情况下,火箭发动机喷管会接收飞行控制信息。但溢流发生后,接收到一个诊断位模式(表明溢流发生) ,导致喷嘴产生错误行为,最终发生悲剧..。
附言
最后,欧洲航天局成立了一个小组,从散落在约12平方公里的火箭残骸中寻找线索,并恢复了事故发生时的数据
这次事故可以说是令人印象深刻。给你留下深刻印象的 bug,欢迎在评论部分进行讨论。