Я наткнулся на разницу в способах создания арифметики с плавающей запятой между сборками 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 всегда false (d устанавливается в 65.0 в обеих строках). Переменная bLarger2 ложна для x64, но true для x86!
Мне хорошо известно о арифметике с плавающей запятой и эффектах округления. Я также знаю, что 32 бит иногда использует разные инструкции для плавающих операций, чем 64-битные сборки. Но в этом случае мне не хватает информации.
Почему существует расхождение между bLarger1 и bLarger2 на первом месте? Почему он присутствует только в 32-битной сборке?