Я компилирую и запускаю следующую программу на 32- и 64-разрядных платформах:
int main()
{
double y = 8.34214e08;
double z = 1.25823e45;
return y * z == 8.34214e08 * 1.25823e45;
}
В то время как в 64-битном результате ожидается ожидаемый (значения одинаковы, а код выхода не равен нулю) в 32 бит, кажется, что существует небольшая разница между значением, вычисленным во время компиляции, с правой стороны сравнения, и левая сторона вычисляется во время выполнения.
Является ли это ошибкой в компиляторе или существует логическое объяснение?
EDIT: это отличается от Почему сравнение double и float приводит к неожиданному результату?, потому что здесь все значения двойные.