Floating point и авария Ariane 5?

Готовлю лекцию по компьютерному представлению действительных чисел и в статье в английской википедии наткнулся на вот такую фразу:
As noted by Kahan, the unhandled floating point overflow exception that caused the loss of an Ariane 5 rocket would not have happened under IEEE 754 floating point.
Про этот случай я, конечно же читал, например, вот здесь, а заинтересовала меня именно связь с кодированием чисел с плавающей точкой.


В своей презентации на 22-ой странице William Kahan (главный идеолог стандарта IEEE 754) говорит, что
The disaster can be blamed just as well upon a programming language ( Ada ) that disregarded the default

exception-handling specifications in IEEE Standard 754 for Binary Floating-Point Arithmetic.


Может ли кто-нибудь пояснить мне этот момент — что именно не так делалось с числом с плавающей точкой, и как бы все это работало под стандартом IEEE 754?


Спасибо!
  • Вопрос задан
  • 3194 просмотра
Пригласить эксперта
Ответы на вопрос 3
Anastasia_K
@Anastasia_K
По Вашей же ссылке:
исключение, «выброшенное» одной из программ IRS, явилось следствием выполнения преобразования данных из 64-разрядного формата с плавающей точкой в 16-разрядное целое со знаком, что привело к «Operand Error»;
Ответ написан
WhiteD
@WhiteD
Специалист широкого профиля
Стандарт этот описывает не только формат хранения но и определяет реализацию различных операций над этими числами, в том числе поведение при исключительных ситуациях. Т.е. все действия над этими данными по стандарту четко детерминированны. Если какой то инструмент заявляет поддержку этого стандарта, то он должен четко следовать не только формату хранения, но и выполнять все операции согласно стандарту. Этого не было в использовавшемся компиляторе Ada.
Ответ написан
nickme
@nickme Автор вопроса
Как я понял, авария была вызвана ошибкой при преобразовании слишком большого 64-битного числа с плавающей точкой в 16-битный знаковое целое. Эта операция вызвала исключение, которое не было никем перехвачено, что и вызвало отказ в работе обоих компьютеров (SRI) и привело к сбою нормального режима полета. Похоже, что в стандарте IEEE 754 эта операция прописана (пока не нашел), по крайней мере, моя простейшая программа на C++ делает этот перевод и ничего при этом не падает :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы