Глеб (heart_beater) wrote,
Глеб
heart_beater

Размышление под прицелом снайперов, гуляющих по крыше...

Такого я ещё не видел. Есть библиотека NaviMath, которую я написал лет 7 назад. Все эти годы она трудилась на тысячах кораблей по всему миру и практически не менялась. Казалось бы, все баги должны были быть из неё давно вычищены...
Но вчера мне показали пример, в котором происходит зацикливание в одной из функций библиотеки. Воспроизвёл пример у себя - всё работает нормально, не зацикливается. А в составе продукта тот же самый код на тех же (до 15-го знака после запятой) данных - зацикливается!
Не поверив своим глазам, запускаю параллельно 2 отладчика: моего отдельно стоящего примера и продукта. И вижу, что уже на первом же по логике работы алгоритма делении вещественных чисел в продукте получается результат, который отличается от "эталонного" где-то в 6-7 знаке. Дальше погрешность накапливается, и в итоге не выполняется условие выхода из цикла "погрешность меньше EPS".
Теперь вот сижу и думаю, как такое может быть. Пришла в голову интересная мысль. Я вспомнил, что когда писали NaviMath, в одном месте мы для оптимизации приведение double к int заменили асемблерной функцией, которая работала раз в 10 быстрее, но кое-что не делала. Неужели её вызов приводит к тому, что так падает точность вычислений? И почему за 7 лет это ни разу не было обнаружено? Может, процессоры стали другие?
Tags: Работа
Subscribe
promo heart_beater april 19, 2021 19:40 42
Buy for 100 tokens
Этот пост написан, в основном, для тех, кто зашёл в этот журнал впервые. Остальные, наверное, почти всё, что тут написано, и так знают. Я буду отсылать к этому посту в ответ на комментарии типа "Крутой журнал! Давай дружить!" Как относиться к таким комментариям, я долго не понимал. С одной…
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 22 comments