Найти в Дзене
Математика не для всех

Как математическая ошибка в округлении дроби стоила жизни 28 американским солдатам в Ираке

Приветствую Вас, уважаемые Читатели! Сегодня еще один материал про математические ошибки, которые приводили к масштабным потерям как в деньгах, так и в человеческих жизнях. Перед Вами история, которая показывает, насколько важными бывают точные математические расчеты, особенно когда дело касается военных действий. Поехали!

Источник: https://yandex-images.naydex.net/NQvb96385/
Источник: https://yandex-images.naydex.net/NQvb96385/

Февраль 1991 года, американские войска уже победоносно завершают операцию "Буря в пустыне", за всё время боевых действий в которой погибло всего лишь чуть более 100 военнослужащих.

Но 25 февраля удар по американской казарме баллистической ракеты "Скад" унесет еще 28 жизней, несмотря на современную систему противоракетной обороны на основе ЗРК "Пэтриот", накрывавшей непрозрачным "зонтиком" силы группировки.

Р-17 Скад. Источник: https://img0.liveinternet.ru/images/attach/c/0/121/360/121360644_1962R17.jpg
Р-17 Скад. Источник: https://img0.liveinternet.ru/images/attach/c/0/121/360/121360644_1962R17.jpg

Как оказалось, жизни американских военных забрала обычная ошибка в округлении, на которую программисты при разработке программного обеспечения к ЗРК попросту наплевали. Она заключалась вот в чём:

У "Пэтриот" был свой внутренний таймер, который отсчитывал время с запуска комплекса. Таймер - дискретный с величиной интервала - 0,1 секунда. Машина - на то и машина, что работает с двоичным кодом. Но как представить в двоичной системе число 0,1 ? Дело в том, что идеально точно это сделать невозможно!

Десятичные дроби переводят при помощи последовательного умножения на новое основание. Рассмотрим на примере.

Всё дело в коварной "единице", ведь, например, число 0,5 можно перевести в двоичную систему точно - это будет 0,1.
Всё дело в коварной "единице", ведь, например, число 0,5 можно перевести в двоичную систему точно - это будет 0,1.

Теперь давайте сделаем то, что сделали американские программисты, а именно для внутренних целей умножим число тактов на 10, чтобы получить секундный формат, который можно точно переводить между системами исчисления.

В десятичной системе 0,1*10 будет 1. А теперь умножим в двоичной системе: 0,000110 * 1010 = 0000.111100 (можете проверить на калькуляторе), что равняется 0,9375 в десятичной! Естественно, чем больше мы возьмем разрядов для представления 0,1 в двоичной системе, тем меньше будет погрешность.

Вот и американцы успокоились, когда в ПО под таймер отдали 24-битную последовательность, не учитывая, что это будет каждый раз давать накапливающуюся ошибку в 0,00000001 секунды!

Их расчет был таким: по своему предназначению ЗРК "Пэтриот" был мобильным комплексом, а длительность его непрерывного боевого применения исчислялась часами.

Источник: https://ic.pics.livejournal.com/masterok/50816465/1972568/1972568_original.jpg
Источник: https://ic.pics.livejournal.com/masterok/50816465/1972568/1972568_original.jpg

Принцип работы ЗРК в любом случае основывается на экстраполяции положения цели в следующий момент времени и перемещении "невидимого ока" вслед за ней. Что же происходит, когда внутренние часы, участвующие в расчетах, идут не так? А то, что ЗРК просто не видит цель, так как "смотрит" не туда!

В случае с ударом по американской казарме, ошибка по времени составляла 0,343 секунды, что означало, что "око" смотрит в сторону от ракетной цели в среднем на 700 метров! Неудивительно, что ЗРК проворонил СКАД! Спасибо за внимание!

Читайте также: