ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
1 мая
814139 Топик полностью
misyachniy (03.02.2018 12:06, просмотров: 70) ответил ASDFS на Очередные подробности очередного смертельного программобага >>>>
Подозрительная какая-то статья. 
"Да ну, фигня, — отмахнулись генералы в Штатах. — У системы нормальный аптайм всего несколько часов."
Переведем 8 часов в 0,1 секунды: 8 * 60 * 60 *10 = 288000 или 0x00046500. Какой смысл заводить плавающую запятую если можно работать в int без потери точности?
Поэтому бодрые наследники древнего Вавилона из корпорации Raytheon вместо десятичного 0,1 загнали в систему двоичное число 0,00011001100110011001100.
Что это за система представления чисел? Тут https://www.h-schm …Converter/IEEE754.html переводим 0,1 и получаем мантису - 0.100000001490116119384765625 и двоичное представление 00111101110011001100110011001101 Описание ошибки:
Внутренний таймер ЗРК Patriot устроен как счетчик количества интервалов времени, прошедшего с момента включения системы. Длина такого интервала — 0,1 секунды. Чтобы перевести количество этих отрезков в секунды, его, понятное дело, нужно разделить на 10. Что для этого предложили разработчики? Естественно, умножить на 0,1.
Сами же пишут счетчик считает количество интервалов, затем количество интервалов умножают на 0,1. Как может накопиться ошибка? При каждом float*int ошибка равна погрешности представления float. Вот это похоже на правду:
"Raytheon начал спешно улучшать систему. И, как оно бывает, доулучшался. Некое кодирующее туловище невыясненного системно-аналитического образования придумало устранить баг с неточным определением 0,1 и написало новую процедуру умножения. Это была хорошая новость, потому что погрешность удалось снизить ещё больше. Плохая новость состояла в том, что туловище, когда переписывало старый код, вставило вызов этой процедуры не во всех случаях, где требовалось. Кое-где остался старый расчёт времени."
Поскольку в систему входят минимум 4 "изделия", то возможен вариант когда нет согласования между разработчиками. Ну и в общем статья как бы написана с нуля - ни каких ссылок на оригинал статьи или источники откуда информация.