Приятель показал замечательный баг, который он только что искоренил в коде. Все мы знаем, что floating-point переменные сравнивать на равенство очень опасно, но ведь всё равно иногда сравниваем, да? Так вот, имелся такой код:
double x =
;
double y = x;
if (y == x)
{
// Сюда программа не попадает никогда, даже когда игрека никто не менял!!!
}А ларчик открывался на удивление просто...
В момент выполнения y = x они оба сидели в регистрах. Десятибайтных (все встают и хором говорят спасибо фирме Intel за нашу повышенную точность). В процессе вычислений между присваиванием и сравнением, иксу места в регистрах не хватило, и он ушёл в память. А игреку хватило...