Блог пользователя yeputons

Автор yeputons, 13 лет назад, По-русски
После публикации моего предыдущего поста на эту тему я решил обобщить информацию, которую узнал.
Итак, на главной странице системы багрепортов GCC висит отличное сообщение: "Проблемы с числами с плавающей точкой - самый популярный небаг". Т.е. к этому надо быть готовым и исправлять это они не собираются.
Небаг заключается в некорректном преобразовании оптимизатором плавающих чисел. Точнее, не так, как это делает соппроцессор (иногда, впрочем, угадывает). Как от double к int, так и в обратную сторону.
В частности, код из предыдущего поста (компилировать с -O2) на некоторых версиях и машинах может вывести, что 20971519 == 20971520. Однако, если сделать EPS = 10-8, то лично у меня всё работает.
Ощущение, что оптимизатор что-то где-то всё-таки криво считает (например, во float).
Но всё же это надо учитывать. Я лично изменил свой любимый EPS. Жаль.
  • Проголосовать: нравится
  • +25
  • Проголосовать: не нравится

13 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
Оптимизатор действительно криво считает.
Только не во float и не в double, а непосредственно в регистрах сопроцессора (которые таки чуть больше, чем double).