С О З Д А Н И Е

Сайтов в Пензе

Как потерять $500 миллионов за 40 секунд из-за ошибки в коде

Надеюсь не для кого не секрет, что при разработке новых продуктов крупные и не очень компании используют старые наработки в программном обеспечении. В теории это позволяет быстрее получить конечный результат, но иногда из-за этого подхода в проект попадают старые ошибки и баги.

Знакомьтесь, Ariane-5G - тяжелая ракета, созданная Евросоюзом. Эксплуатируется она уже не один десяток лет и за всё время было сделано 105 удачных запуска. Но нам будет интересен самый первый запуск 5ого поколения ракеты Ariane. 4 июня 1996 произошёл взрыв ракеты с полезной нагрузкой в виде 4 полуторатонных спутников. 10 лет работы и около 500 миллионов долларов превратились в пепел.

Комиссия по крушения начала работу, взяв за основу данные телеметрии, траекторию с радиолокационных станций и видеозаписи с камер. Но самое интересное, что среди обломков были найдены 2 инерциальные системы навигации, в которых хранились логи, которые не успели улететь на Землю. Расследование пришло к выводу, что во время полета на 40 секунде что то заставило сопло двигателя сильно отклониться, что и привело к крушению.

Внутри кода, которые отвечал за выравнивание были строчки, которые преобразовывали 64 битное число с плавающей точкой в целое 16 битное число. Эта часть кода была проверена инженерами и расчётами. 64-битная переменная всегда содержала внутри число, которое точно помещалась в 16 бит. Вот только все эти расчёты были сделаны на прошлой версии ракеты, а в новой данные траектории были иные и для них никто проверок не проводил. Именно поэтому в реальном полёте система при расчётах получила число, которое целиком не поместилось в 16 бит и произошло переполнение переменной.

Всё это заставилось процессор перейти внештатный режим. Пример подобного переполнения переменной я показал на видео в карусели, листайте.

Text.ru - 100.00%


Другие уроки

Информация

  • Дата : 22.09.2021 01:48
  • Категория : Программирование
  • Просмотров : 442
1