Как одно преобразование остановило систему навигации
В ракете Ariane 5 полёт контролировали инерциальные системы: они определяли движение аппарата по данным датчиков и передавали компьютеру сведения о его положении и скорости. Для части расчётов программа переводила число из 64-битного формата в 16-битное поле — короче, но с гораздо более узким диапазоном допустимых значений.
Проблема возникла, когда величина скорости вышла за пределы, которые помещались в это поле. Такое несоответствие называется переполнением. Программа не предусмотрела безопасного способа обработать ситуацию и вызвала необработанное исключение — ошибку, из-за которой вычисления прерываются. Навигационная система отключилась.
Почему резерв не спас ракету
У Ariane 5 была резервная инерциальная система, но она выполняла ту же программу и получила те же данные. Поэтому переключение на запасной блок не устранило причину сбоя: он тоже отключился. Лишившись корректных сведений о движении, ракета отклонилась от расчётной траектории и начала разрушаться. Система безопасности активировала самоуничтожение, чтобы не допустить неконтролируемого полёта обломков.
Ошибка была связана не с тем, что компьютер «не справился» с вычислением вообще, а с конкретным предположением в программе: значение, которое укладывалось в допустимые границы для прежних условий, будет безопасным и здесь. Этот случай показал, что резервирование оборудования мало помогает, если одинаковая логика сбоя есть во всех резервных системах.




