计算机科学界的 10 个著名错误
死锁、竞态条件、除以零、无限循环、无限递归……您可能在计算机编程中听说过这些术语,并且您可能知道如果上述术语存在于您的程序中,它会如何在软件中产生大问题。如果计算机编程是任何人都可以选择的最有趣的领域之一,那么它也是人们可以为自己选择的最危险的道路之一。程序员知道在编写无错误代码时他/她需要注意多少。一个小错误可以在几秒钟内使某人成为富人,也可能导致商业甚至人命的金钱损失。
我们将讨论历史上程序员制造的一些著名的错误,以及它如何影响商业和人类的生活。
1. Ariane 5 Rocket Failure (1996): Ariane 5 爆炸是历史上最昂贵的软件错误之一。这个著名的欧洲火箭是用来发射卫星的,它的开发成本在80亿左右。火箭在发射 40 秒后就爆炸了。它失败的原因是整数溢出,这是计算机编程中非常常见的错误。在声明变量时注意变量所需的内存大小非常重要,这是开发火箭时的错误。编码是在Ada中完成的。经过团队的调查,他们发现这行代码试图将一个 64 位的数字放入一个 16 位的空间中。这次失败的结果是损失了 3.7 亿美元。
2. Y2K Bug (1999):在 1960 年代,计算机工程师遵循使用两位数代码编写程序的方法,留下“19”。他们中的大多数人认为在变量“year”之前写“19”是不必要的内存浪费。例如,为了表示 1970,他们只使用了两个结尾数字“70”。直到 1999 年 12 月 31 日,一切都很好。但在那之后,一旦 2000 年 1 月 1 日,由于两位数表示“00”,许多计算机将年份读取为 1900。这种虫子被称为 Y2K 或“千年虫”(字母 K 代表千,用于表示数字 1、000。因此,Y2K 代表 2000 年。)。它影响了每天计算利率的银行、发电厂、交通等技术中心以及许多其他方面。数十亿美元用于升级全球计算机系统。
3. 爱国者导弹失败(1991 年):当军事行动中出现错误时,会危及许多人的生命。在第一次海湾战争期间,部署了一枚美国爱国者导弹来探测和拦截一次飞毛腿导弹袭击,该袭击依赖于非常准确的时机。由于系统的舍入误差,计算出的时间不正确,导弹未能拦截伊拉克对沙特阿拉伯军营的飞毛腿导弹袭击。 28名美国士兵在那次袭击中丧生,100人受伤。
4. AT&T (1990): AT&T 选择升级比目前更复杂的软件,并希望改进长途电话,但结果适得其反,网络瘫痪。有九个小时,AT&T 的客户无法拨打长途电话。由于这次失败,7500 万个电话未接电话和 20 万个航空公司预订丢失。问题是处理交换站崩溃的交换站代码中的竞争条件。竞争条件是由循环内的 switch 语句引起的。由于代码中的这个错误,AT&T 损失了 6000 万美元。
5. Gangnam Style Broke Youtube:在 youtube 刚开发的时候,没有人认为一首歌可以获得数十亿的点击量,它可以超过 32 位有符号整数的最大大小。 32 位有符号整数的最大值是 2、147、483、647,当歌曲 Gangnam Style 出现在这首韩国流行歌星的热门歌曲的浏览量超过最大值时,我们得到了以下结果......
后来 Google 将视图计数更改为 64 位有符号整数以修复该错误。
6. 水手 1 号软件错误(1962 年):水手 1 号航天器被认为是历史上最昂贵的故障之一。该航天器的设计目的是飞越金星,但在卫星可以起飞之前,机载引导天线发生故障,并偏离了预定的飞行路径。此失败背后的原因是缺少超标。由于代码中省略了连字符,航天器收到了错误的引导信号。 1962 年,这枚火箭的成本超过 1800 万美元。科幻作家亚瑟 C 克拉克将水手 1 号描述为“被历史上最昂贵的连字符破坏”。
7. NASA 的火星气候轨道器(1988 年):由于测量单位不同,火星气候轨道器在距离地球 286 天的旅程后被摧毁。该项目的设计成本为 1.25 亿美元,用于研究火星表面和气候。通讯被切断,轨道器以错误的角度进入火星大气层,而不是进入行星轨道。原因是控制 Orbiter 推进器的软件使用英制单位(磅力),而不是公制单位(牛顿),并且相互冲突。
8. Pentium FDIV Bug (1993):许多计算机运行在 Intel 技术上,Intel 一直以其出色的处理器而闻名,但数学教授 Thomas Nicely 在 1993 年在 Pentium x86 处理器中发现了一个错误。这个数学错误是除法浮动- 特定范围内的点数。例如,除以 4195835.0/3145727.0 得到 1.33374 而不是 1.33382,误差为 0.006%。并非所有处理器都有故障,但发现了大约 500 万个有缺陷的芯片,英特尔同意只有在客户能够证明他们受到有缺陷芯片的影响时才更换芯片。后来该公司为任何抱怨的人更换了芯片,英特尔的成本为 4.75 亿美元。
9. Paypal 错误(2007 年):世界上最大的在线支付处理商 Paypal 也面临编程错误。 PayPal 意外使宾夕法尼亚州男子克里斯雷诺兹以 92 万亿美元成为世界上最富有的人。 PayPal 错误地将这笔金额记入了他的账户,他的财富是整个地球总 GDP 的 1000 倍。在 64 位数字的世界中,确切的数量很重要,这表明存在编程错误。错误很快被识别出来,并且在他登录时他的帐户已归零。
10. Windows Calculator Bug: Windows 计算器本身也包含一个错误。这个bug几乎存在于所有Windows版本,包括Windows XP、Vista、7和Windows 8。您可以在您的系统中检查它。打开 Windows 计算器,然后输入 4 并取平方根,你将得到 2,然后从中减去 2。您将看到不同的结果,而不是结果 0。您可能会在不同版本的 Windows 上看到不同的输出。即使对于 sqrt(9)-3,答案也是错误的。答案应该是零,但你会看到一些奇怪的数字。最后,微软承认了计算器应用程序中的这个错误,并在 Windows 10 更新版本中修复了它。检查Microsoft Windows Calculator 中的链接错误。