Наш телеграмм канал: t.me/armyflot
Ни самая сильная армия в мире, ни штат программистов, ни новейшее вооружение не спасут от смерти, если в дело вмешаются математика и невнимательный кодер! Американцам пришлось прочувствовать эту истину на собственной шкуре.Ни самая сильная армия в мире, ни штат программистов, ни новейшее вооружение не спасут от смерти, если в дело вмешаются математика и невнимательный кодер! Американцам пришлось прочувствовать эту истину на собственной шкуре.
Вечером 25 февраля 1991 года, уже под самый конец операции «Буря в пустыне», на американскую авиабазу в саудовском Дахране свалился иракский «Скад». Вот, казалось бы, причём здесь округление дробей?
Ракета разнесла казарму 475-го отряда квартирмейстерской службы армии США, ответственного за очистку воды. Взрыв убил 28 человек — это пятая часть всех погибших американцев за всё время войны в Заливе. Ещё около сотни получили ранения.
«Скад» был обнаружен радаром дежурной батареи зенитного ракетного комплекса Patriot, прикрывавшей Дахран. Ракету засекли… и ничего не сумели сделать. Осталось только наблюдать, как она валится на казарму.
Как выяснилось, вину за смерть 28 человек взял на себя софт зенитного комплекса.
Давай округлим это по-быстрому
Баг в нём был простой, как кирпич. Не баг даже, а математическая фича: разработчики и военные о ней знали, и все на неё плевали, как на чепуховину ничего не значащую.
Внутренний таймер ЗРК Patriot устроен как счетчик количества интервалов времени, прошедшего с момента включения системы. Длина такого интервала — 0,1 секунды. Чтобы перевести количество этих отрезков в секунды, его, понятное дело, нужно разделить на 10. Что для этого предложили разработчики? Естественно, умножить на 0,1.
В машинной арифметике деление часто подменялось умножением на обратное число, так было проще проектировать вычислительные устройства и работали они быстрее. Метод умножения на обратное число, к слову, стар, как сама математика: его применяли ещё в древнем Вавилоне.
Теперь вторая часть Марлезонского кодирования. Числа-то двоичные.
Точного представления десятичной дроби 0,1 в двоичном виде не существует — оно может быть только приблизительным.
Поэтому бодрые наследники древнего Вавилона из корпорации Raytheon вместо десятичного 0,1 загнали в систему двоичное число 0,00011001100110011001100. Оно немногим меньше требуемых 0,1 — примерно на одну десятимиллионную. Вот на это число радостно и умножили, полагая, что проблема решена.
Кодеры действительно были правы, когда клеили этот «лейкопластырь». При расчёте параметров движения цели система оперирует близкими значениями времени с единой и очень небольшой систематической погрешностью. Поэтому никаких проблем быть не должно. Ситуацию признали нормальной для использования в реальных условиях — и забили. В таком виде комплекс и приняли на вооружение в 1982 году.
Если вчера война
А дальше? Дальше Саддам Хусейн более не смог выносить собственной крутости в одиночку и решил поделиться ею с окружающими, захватив летом 1990 года Кувейт. Саддам пацан был мутный и дерзкий, но не папуас какой, а вполне упакованный. Имелись у него и оперативно-тактические ракеты, самостоятельно модернизированные, а также химическое оружие.
Весь этот арсенал создавал проблему. Потребовалось срочно переделывать батареи Patriot для Ближнего Востока, чтобы те могли перехватывать баллистические цели, идущие со значительной скоростью — 1700 м/с и больше. А это, считай, гиперзвук; и среди аэродинамических целей, под которые первые версии Patriot рассчитывались, такие скорости не встречаются. Им больше самолёты подавай или крылатые ракеты
В общей сложности на театре военных действий было развёрнуто 33 батареи Patriot. В том числе 22 батареи со 132 пусковыми установками — в Саудовской Аравии; четыре(из них две американские и две датские с 26 пусковыми установками) — в Турции; а начиная с 19 января, дополнительные силы ПВО были развёрнуты и в Израиле. Всего территорию Израиля прикрывали семь батарей: две израильские, четыре американские и одна датская, с 48 пусковыми установками.
Raytheon начал спешно улучшать систему. И, как оно бывает, доулучшался. Некое кодирующее туловище невыясненного системно-аналитического образования придумало устранить баг с неточным определением 0,1 и написало новую процедуру умножения.
Это была хорошая новость, потому что погрешность удалось снизить ещё больше. Плохая новость состояла в том, что туловище, когда переписывало старый код, вставило вызов этой процедуры не во всех случаях, где требовалось. Кое-где остался старый расчёт времени.
Вуаля! В системе завелось ДВА внутренних значения времени, используемых при расчёте РАЗНЫХ параметров. Различие между ними накапливалось тем сильнее, чем больше времени прошло с момента включения.
Теперь погрешности в математике ЗРК уже начали что-то решать, но об этом никто не думал. Потому что штатные проверки комплекса после переделки показывали, что всё ОК. Согласно программе испытаний: «Пункт 1: включили систему. Пункт 2: выставили режимы. Пункт 3: всё работает. Пункт 4: выключили. Переходим к следующему разделу».
Но никто не проводил «endurance test»: проверку на длительное дежурство на одном месте да против скоростных целей. А оно и зачем, если Patriot — это мобильный войсковой ЗРК для прикрытия боевых порядков? На одном месте ему по всем наставлениям стоять не следует, в том числе, в интересах собственной выживаемости.
Первыми за аномалию в работе комплекса зацепились не в США, а в Израиле. Развёртывающиеся боевые порядки страна прикрывать особо не собиралась, а вот собственная территория Израиль интересовала. Ну и по причине обычной национальной запасливости.
У ЗРК Patriot нет своих собственных накопителей для «логов» работы, поэтому комплексам полагались внешние. Но в армии США накопители не любили. Ходило вполне обоснованное мнение, что их софт какая-то очередная вавилонская ключница делала, и накопители периодически вешают всю систему. Поэтому операторы американских ЗРК на Ближнем Востоке их обычно не подключали, а вот в ЦАХАЛе всё сделали по инструкции.
Какой шлемазл это сделал?
Первые иракские «Скады» стартовали в сторону Израиля 18 января 1991 года. Израильские офицеры, однако, нашли время отсмотреть «логи». Уже 11 февраля от них в США прилетел первый«багрепорт»: после нескольких часов непрерывной работы ЗРК наблюдается необъяснимый дрейф параметров при переходе от режима обнаружения к сопровождению цели.
Радар при работе «на сопровождение» смотрит во вполне определенную узкую область пространства, где должна быть цель — так называемую «Range Gate Area», RGA. А ракета «Скада» быстрая, и надо чётко понимать, где она будет на следующем такте работы. Положение RGA определяется опережающим расчётом в зависимости от координат и скорости цели. А эта математика прямо завязана на точный отсчёт времени. А время у нас отсчитывается… ну, вы уже видели, как.