Найти тему
Александр Долгих

Как деление на ноль обездвижело американский военный крейсер и израильский истребитель

Оглавление

Баги есть всегда и в любой программе. Сегодня я расскажу о двух из них, которые могли бы обернуться фатальными последствиями, будь техника на боевом дежурстве или в условиях реальных боевых действий.

Американский крейсер UUS Yorktown

Крейсер Йорктаун американских военно-морских сил благополучно нёс службу с 1984 года. В 1996 году в рамках модернизации "Умный корабль", системы управления были переведены на коммерческое программное обеспечение. 27 компьютеров Pentium Pro, работавшие на Windows NT 4.0 были завязаны в сеть и позволяли автоматизировать управление кораблем.

USS Yorktown (CG-48)
USS Yorktown (CG-48)

Во время учений 21 сентября 1997 года в "умной системе" произошел сбой — система не обновила состояние топливного клапана. Оператор попытался выполнить сброс для калибровки клапанов топливной системы и ввел в одну из ячеек расчетной таблицы ноль. Программа запустила операцию деления на этот самый ноль, началась цепная реакция, целый каскад ошибок, которые быстро распространились по всей локальной сети из 27 управляющих компьютеров.

В результате отказала вся система управления Йорктауна, включая двигатель. Корабль оказался полностью обездвижен и обезоружен. Для перезапуска и включения аварийной системы управления понадобилось 2 часа 40 минут. Сложно представить, чтобы крейсер остался цел за это время, если бы сбой произошел в условиях реальной военной операции.

А всё почему? Потому что программисты просто не предусмотрели проверку операции деления на ноль.

Израильский истребитель

Подобная ситуация произошла на испытаниях истребителя в Израиле. Автопилот безупречно пролетел над равнинной частью, пустыней, над горами, над долиной реки Иордан. Но когда самолет подлетел к Мёртвому морю, автопилот отключился, произошел какой-то сбой и пилотам пришлось переходить на ручное управление и совершать посадку самостоятельно.

После долгих разбирательств выяснилось, что программа системы управления автопилотом в некоторых местах выполняла деление на значение высоты самолета над уровнем океана. Мёртвое море, как известно, расположено почти на 400 метров ниже уровня мирового океана, то есть в какой-то точке программа производила деление на ноль, провоцируя ошибку, которая отключала автопилот.

-2

В мире очень много подобных историй, когда крохотная ошибка или баг, приводили к фатальным последствиям. Если интересно, ставьте лайк, и я расскажу ещё несколько историй. А пока подписывайтесь на мой резервный канал в Телеграм на случай отключения Ютуба и продажи Дзена, и вот, что ещё интересно почитать: