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

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

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

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 22 comments