Недавно я изменил какой-то код
double d0, d1;
// ... assign things to d0/d1 ...
double result = f(d0, d1)
до
double d[2];
// ... assign things to d[0]/d[1]
double result = f(d[0], d[1]);
Я не изменил ни одно из назначений на d
, ни вычисления в f
, ни что-либо еще, кроме того факта, что числа теперь хранятся в массиве фиксированной длины.
Однако при компиляции в режиме выпуска с включенными оптимизациями result
изменился.
У меня вопрос: почему и что я должен знать о том, как хранить двойники? Один способ эффективнее или лучше другого? Есть ли проблемы с выравниванием памяти? Я ищу любую информацию, которая поможет мне понять, что происходит.
РЕДАКТИРОВАТЬ: Я попытаюсь получить некоторый код, демонстрирующий проблему, однако это довольно сложно, поскольку процесс, через который проходят эти числа, огромен (много математики, числовых вычислителей и т. Д.).
Однако без изменений при компиляции в Debug . Я проверю это еще раз, чтобы убедиться, но это почти наверняка, то есть двойные значения идентичны в Debug между версией 1 и версией 2.
Сравнивая отладку с выпуском, результаты никогда не были одинаковыми между двумя режимами компиляции по разным причинам оптимизации.