Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

4 июня 1996 года на борту ракеты Ariane 5, разработанной Европейским комическим агентством, было четыре недорогих спутника. Это был её первый пробный полёт. Разработка ракеты обошлась в семь миллиардов долларов, а сама ракета стоила 500 миллионов. В отличие от "Протона-М", Ariane 5 не добралась даже до неправильной орбиты, но, также как и в случае с "Протоном-М", виновником её неудачи стала ошибка, закравшаяся в расчёты, заложенные в ПО ракеты.
На 39 секунде полёта сработал механизм самоуничтожения аппарата, который и привёл к его взрыву. Его активация произошла из-за того, что ракета отклонилась от курса. Система ориентирования аппарата основана на гироскопах и акселерометрах. Из-за ошибки в программном коде, выдаваемая ей информация оказалась совершенно не совместимой с реальностью .
 
Данные с плавающей запятой для инерциальной системы отсчёта переводились из 64 бит в 16. В результате одно из чисел оказалось больше 32767 (максимально возможное шестнадцатибитное целое число со знаком). После этого система ориентации ракеты выключилась, а без неё далеко не улетишь.
 
Почему же возникла эта ошибка? Просто инженеры считали, что значение переменной никогда не превысит предельное значение, как это было в случае с менее быстрой Ariane 4. Увы, учёные недооценили новую ракету.
 
***
 
9. Глупейший баг в коде управляющей программы ракеты Ariane 5 (1996), вызвавший ее взрыв спустя какие-то сорок секунд после старта. Дело в том, что значительную часть софта эта модель унаследовала от своей предшественницы Ariane 4, однако один из модулей забыли переделать для новых условий. В результате ошибка переполнения регистра вызвала сбой системы ориентации в пространстве, неправильную коррекцию курса и разрушение корпуса под действием аэродинамических сил. При этом дублирующий модуль вышел из строя всего лишь на 0,05 секунды позже основного.
 
***
 
В научном коде нельзя игнорировать точность и корректность преобразований. Даже самые мощные современные компьютеры могут обеспечить точность лишь конечным числом разрядов. Значимость точности трудно переоценить — она подтверждается катастрофами, которые происходили из-за арифметических ошибок; вспомните, например, известный взрыв непилотируемой ракеты «Ариан 5» в 1996 году (64-битное число с плавающей точкой в системе инерциальной ориентации было неправильно преобразовано в 16-битное целое со знаком… и последовал взрыв!). Конечно, вы вряд ли разрабатываете программное обеспечение для ракет, но важно понимать, насколько и почему во многих научных приложениях столь важна высокая точность, а также почему стандарт IEEE 754 для двоичной арифметики с плавающей точкой может оказаться скорее сковывающим, чем полезным.

Всего записей: 24132 | Зарегистр. 06-12-2002 | Отправлено: 03:22 04-08-2011 | Исправлено: akaGM, 04:13 04-08-2011
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru