软件编程史上著名的bug,一个数值溢出问题引发一场事故

1996年,

阿丽亚娜火箭升空约40秒时,

在3500米以上高度发生爆炸。

火箭瞬间变成一个几亿欧元的大烟花。

这应该是史上最贵的烟花了。

事故原因呢?

。。。。。。

是一行代码惹的祸

浮点数转换整数

发生了数值溢出问题。

什么是数值溢出?为什么会发生数值溢出?

任何类型都只能用有限的位数来存储数据,表示数的范围是有限的

向变量赋的值超出了其类型的表示的数的范围

生活中的数值溢出问题?

第一代身份证号码中的出身年份是两位数,这时就会出现问题,

如何区分百岁老人和新生婴儿呢?

第二代身份证将记录的出生年份改为四位数

我们再来看一个在C语言中整数数值溢出的实例

编译运行时给出了警告:

[Warning] integer overflow in expression [-Woverflow]

并且输出的结果也是错误的,导致程序运行出错,计算结果超出了long的范围

long类型占4字节,可表示的范围 :

-21 4748 3648 ~ 21 4748 3647

在今后编写代码的时候,我们也一定要注意数值溢出问题,避免出错。以下是几种解决的方法:

1.用取值范围更大的类型,缺点是导致存储空间的浪费

2.充分了解处理问题规模,使用恰当的数据类型

3.同种类型在不同平台占的字节数是不一样的,最好是用sizeof计算变量或类型的长度

~~end 感谢阅读

想要了解更多编程小知识,关注 IT课代表家

如果对您有帮助,请转给更多的人看看

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181106A13QS600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券