小数点第24位后扯拐引发的悲剧!导弹击中美军营,28名士兵惨死

 

以前钱少,买东西要精确到小数点后两位,比如一根冰棍两分钱,也就是0.02元;现在钱不值钱了,买东西就只精确到...



以前钱少,买东西要精确到小数点后两位,比如一根冰棍两分钱,也就是0.02元;现在钱不值钱了,买东西就只精确到个位,比如某个商品售价19元,不会再精确到19.38元。得益于支付手段的数字化,我们现在很荣幸又有复古的趋势了,比如一样商品经常会标价19.99元,你付款的时候,支付宝什么的有时候也会陡然给你来个惊喜,哇,恭喜你这次付款实付19.98元,节约了0.01元。



这就是精确数和整数的区别,虽然在付款上我们现在已对精确到小数点后两位完全没任何感觉,但在实际情况中有时也极为重要,甚至是致命的。美国军队就曾经因为放弃了小数点第24位后的数字,而导致了28名军人的死亡,100多人受伤,这究竟是怎么回事呢?



1991年海湾战争爆发,飞毛腿导弹大战爱国者导弹也拉开了序幕。伊拉克向美军及盟国发射了大量苏制飞毛腿导弹,美军和盟国则用爱国者导弹进行拦截,效果似乎很不错,飞毛腿导弹并未对盟军造成很大威胁。但2月25日,一枚飞毛腿导弹却直接落在了美军位于沙特阿拉伯宰赫兰的军营,导致28名美军士兵死亡,爱国者导弹却罕见地没有做出任何反应。难道是拦截系统失效了?



美国政府问责局事后的调查表明,爱国者导弹没有拦截的原因,仅仅是因为计算机软件设计时的一个小问题——计算时间时舍弃了小数点第24位后的数字,导致“误差”增大,未能找到来袭的导弹,从而眼睁睁看着导弹落下爆炸。



原来爱国者导弹的拦截计算机是用二进制计算和存储数据的,它会将系统内部时钟测量的时间以1/10秒为一个单位,然后转换成二进制存储到一个24位的寄存器里。由于1/10的二进制是一个无限循环数0.000110011001100110011001100……,而寄存器只有24位,后面的就只有舍弃了,这就导致再转回十进制的时候,存在约0.000000095秒的误差。

本来这点误差也没有什么,但当时爱国者系统已开机100个小时,累积下来的误差就达到了0.34秒;而飞毛腿导弹的速度是1676米/秒,这导致雷达发现导弹,爱国者启动去寻找目标的时候,已有500多米的误差,根本无法在预定区域发现目标,从而无法做出反应。



以色列方面实际在当月中旬就发现了这个问题,并告知了美军,建议每隔一段时间就重启系统,以解决这个问题,制造商也在准备更新软件。然而美军并未引起重视,而且也不明白这每隔一段时间究竟是多久,最终导致了悲剧的发生,第二天所有爱国者导弹系统就全部更新了软件,可28位士兵的生命已经无法挽回了。



一个小小的失误酿成严重的后果,谁能想到精确到小数点后24位都还要出问题呢?而以色列人偏偏就发现了,并提出了解决方案,只是作战人员文化不高,未能充分理解,从而未能建立定期重启的机制,导致了悲剧发生。再想想GPS时钟导致的定位误差,科技水平发展越高,对数值的要求就越准确,人类文明的未来实际就建立在对数值精益求精的追求上,什么时候我们需要精确到小数点后100位了,人类文明或许也就离神级文明不远了。

徐德文科学频道公众号:xudewen028,传播最新、最前沿、最有趣的科学!


    关注 徐德文


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册