十进制的0.1用二进制表的话,是0.00011001100110011……十进制的0.1无法用有限长度的二进制表示,因此十进制的小数在计算机中存在一定的误差。忽略计算机无法精确表示十进制小数可能会带来严重后果。爱国者导弹故障也许是有记录的后果最为严重的十进制/二进制算术运算故障。
爱国者导弹的地面跟踪雷达会检测并跟踪飞来的目标。爱国者的控制系统软件执行24位经度的算术运算,系统时钟每0.1s更新一次。在1991年第一次伊拉克战争期间,位于达兰的一个爱国者反导系统已工作了超过100小时,这段时间内积累的时钟误差已经达到0.2322s,这对应于目标位置的估计误差达到667m。在这个时间中,爱国者导弹并未成功拦截飞来的飞毛腿导弹,反而造成28名美国士兵丧失。当然,没有误差也不意味着一定会拦截成功。但误差却会导致系统拦截失败。
网友评论