Почему плавающее вычисление и приведение типов показывают разные результаты в конфигурации отладки и выпуска?

Это действительно странная ошибка для меня, и мне потребовалось много времени, чтобы понять, что происходит. Чтобы упростить и воспроизвести, просто создайте пустое консольное приложение win32 с помощью VS2005 и используйте этот код в основном методе:

float a = 411.00418f;
float b = 1.0f;
float c = 0.076279849f;
unsigned short result = (unsigned short)( (a-b)/c );
unsigned short result2 = (unsigned short)( (float)((a-b)/c) );
// Debug: 5374, 5375
// Release: 5374, 5374
printf("%d, %d\n", result, result2);  

Почему result2 показывает другое значение в режиме отладки / выпуска?

9
задан Mysticial 10 February 2012 в 18:55
поделиться