历史上最严重的基于时间的编码错误



历史上最严重的基于时间的编码错误


文章图片



历史上最严重的基于时间的编码错误



关于轻微错误的代码如何导致金钱和生命损失的噩梦 。

蒂怀点Tiwai Point 铝制避难所位于新西兰 。 它可能是世界上最好的铝生产基地——2015 年 , 他们生产了 335000 吨 。 运营规模如此之大 , 占新西兰全部电力输入的13% 。 然而 , 在 1996 年 , 一个小错误造成了灾难性的后果 。
1996年正好是闰年 , 一?午夜除夕d , 所有的计算机系统中也同时出错 。 这些计算机没有被编码为一年 366 天 , 因此所有 660 台计算机都因某些错误计算而关闭 。 因此 , 冶炼操作停止 , 导致一些罐子过热 , 许多罐子受到无法修复的损坏 。 这使制造商损失超过 100 万美元 。
美国宇航局的深刻影响美国宇航局于 2005 年 1 月发射的深度撞击航天器的任务是探测彗星表面之下 。 虽然航天器确实完成了它的任务 , 但它还有更多的潜力——也就是说 , 直到 NASA 意外失去与它的通信 。 你看 , 航天器没有直接用它的时钟测量时间 , 它使用 64 位浮点数表示时间 。 相反 , 它取了 64 位值 , 将其乘以 10 , 并将其转换为 32 位无符号整数 , 以便将该值存储为毫秒 。 不幸的是 , 这个计算没有防止溢出 。 如果时间恰好太大而无法用 32 位表示 , 那么它就会出错 。

这正是 2013 年 8 月 11 日发生的事情 , 距离 Deep Impact 推出近 9 年 。 时间不能用 32 位表示 , 这会导致处理器复位 。 然后 , 当处理器尝试记录错误时 , 它会遇到完全相同的错误(因为时钟仍然溢出) , 并再次重置 。 这使卫星处于无限重置循环中 , 使其无法运行任何飞行软件 。 它不再能够自我定位 , 甚至无法与 NASA 总部进行通信 。 没有方向 , 它无法定位接收太阳能 , 这艘价值3.3亿美元的飞船慢慢耗尽动力 , 在太空深处死去 。
爱国者导弹
对于至少 28 个家庭来说 , 这绝对是历史上最严重的编码错误 。 1991 年第一次海湾战争期间 , 来自伊拉克的“飞毛腿”导弹成为美军最大的威胁之一 。 为了对抗这种威胁 , 美国开发了爱国者导弹 , 这是一种反弹道解决方案 。 然而 , 这个防御的软件工程师并没有在它需要去的所有地方都包含一个特定的子程序 。 因此 , 在代码中 , 一种时间度量使用 48 位小数点表示 , 而另一种度量使用 24 位定点表示 。 时间的 24 位定点表示不能表示十分之一秒 。 因此 , 内部时钟开始缓慢关闭 , 大约每小时 0.003433 秒 。
【历史上最严重的基于时间的编码错误】1991 年 2 月 25 日 , 该系统已运行了很长时间(约 100 小时) 。 这个微小的错误已经设法使自己复杂化 , 以至于时钟偏离了大约 0.33 秒 。 虽然这个价值看起来很小 , 但以导弹的规模和速度来看 , 它是相当大的;伊拉克飞毛腿导弹有能力在短短的时间内飞行半公里 。 当伊拉克向美军发射飞毛腿导弹时 , 爱国者导弹由于时间延迟未能拦截它 , 悲惨地导致超过28名士兵死亡和100多人受伤 。
如果您曾经负责过任何对时间要求严格的软件 , 希望您能从这些故事中学到东西 。 七爪网

    推荐阅读