大家好,我卡颂。

有位老程序员前辈曾说:

没有经验过p0bug的职业生涯是不残缺的

以上名言是我瞎编的。然而,作为程序员,对bug必定见怪不怪了。

你经验的bug为公司造成了多少损失呢?本文咱们来看一个造成8.7亿刀损失的bug

事变始末

1996年6月4日,第一枚Ariane 5号火箭在法属圭亚那海岸发射升空。

本次发射耗资3.7亿刀,火箭载有价值5亿刀的通信卫星,总投入8.7亿刀。

腾飞37秒后,火箭向谬误的方向翻转了90度,助推器在地面撕裂,飞船被微小的液态氢火球吞噬。

在爆炸产生的霎时,工程师甚至还在用法语汇报:“所有设置失常,轨道失常”。

总控室面色凝重的工程师和前面动乱的人群预示着这所有产生的太忽然了。

这次灾难性的事变引发了公众考察,并且因为火箭搭载的卫星损毁,对地球磁层运作的科学研究推延了近4年。

Ariane 5事变被宽泛认为是历史上最低廉的bug之一。

事变起因

这次事变的起因是一个浮点数溢出造成的

Ariane系列火箭的利用中蕴含一个用于确定火箭是向上还是向下的变量,被称为程度偏差,后文简写为BH

在设计Ariane 5的上一代火箭Ariane 4时,工程师详细分析了BH的边界状况,确定其绝不会超过一个16位整型的示意范畴(-32768~32767)后,将该变量定义为16位整型

然而到了Ariane 5,因为火箭性能晋升,在利用的绝大部分中BH被定义为64位浮点数,而一些局部因为忽略,还应用
Ariane 416位整型

当这两局部代码组合应用时,会尝试将一个64位浮点数赋值给
16位整型

在火箭回升的前几秒,火箭加速度很低,所以这两个值之间的转换是胜利的。

失望的是,随着火箭加速度越来越高,当值超过16位整型的可示意范畴后,溢出产生了。

失常状况下,火箭引擎喷嘴接管的是航行管制信息。然而溢出产生后,它接管到了一个诊断位模式(表明溢出产生),导致喷嘴做出谬误行动,最终喜剧产生......

后记

最终,欧洲航天局组建了一个团队,从分布在大概12平方公里的火箭残骸中寻找线索,复原了事变产生时的数据。

这次事变能够说是印象粗浅了。你有什么印象粗浅的bug,欢送在评论区探讨。

欢送退出人类高质量前端框架钻研群,带飞