Тяжела и неказиста жизнь простого программиста...

Oct 27, 2007 23:33

Приятель показал замечательный баг, который он только что искоренил в коде. Все мы знаем, что floating-point переменные сравнивать на равенство очень опасно, но ведь всё равно иногда сравниваем, да? Так вот, имелся такой код:

double x = ;
double y = x;

if (y == x)
{
// Сюда программа не попадает никогда, даже когда игрека никто не менял!!!
}А ларчик открывался на удивление просто...
В момент выполнения y = x они оба сидели в регистрах. Десятибайтных (все встают и хором говорят спасибо фирме Intel за нашу повышенную точность). В процессе вычислений между присваиванием и сравнением, иксу места в регистрах не хватило, и он ушёл в память. А игреку хватило...
Previous post Next post
Up