Разница в арифметике с плавающей запятой между x86 и x64

Я наткнулся на различие в способах арифметики с плавающей запятой между сборками MS VS 2010 для x86 и x64 (обе выполняются на одной и той же 64-битной машине).

Это сокращенный пример кода:

float a = 50.0f;
float b = 65.0f;
float c =  1.3f;
float d = a*c;
bool bLarger1 = d<b;
bool bLarger2 = (a*c)<b;

Логическое значение bLarger1 всегда ложно (в обеих сборках d равно 65.0). Переменная bLarger2 является ложной для x64, но верной для x86!

Я хорошо знаю арифметику с плавающей запятой и происходящие эффекты округления. Я также знаю, что 32-битные иногда используют другие инструкции для операций с плавающей запятой, чем 64-битные сборки. Но в этом случае мне не хватает некоторой информации.

Почему существует несоответствие между bLarger1 и bLarger2 на первом месте? Почему он присутствует только в 32-битной сборке?

Ответы на вопрос(2)

Ваш ответ на вопрос