Я пишу кроссплатформенную программу для Windows и Linux, и мне хотелось бы, чтобы она вела себя как можно более одинаково на обеих платформах. Я использую в программе немного математики, например. std::atan2 вызывает функцию, и я заметил, что для одних и тех же входных значений иногда результат расходится в единицах наименьшей точности в зависимости от платформы или настроек оптимизации.
Рассмотрим этот сокращенный пример:
Код: Выделить всё
#include
#include
int main() {
// 0.14189707 with GCC on Linux
// 0.14189705 with MSVC (and compile-time evaluation in GCC)
std::print( "{}", std::atan2( 1.f, 7.f ) );
}
Онлайн-демо. Хотя разница между результатами невелика, она усиливается следующими вычислениями в моей программе, поэтому я хотел бы полностью избежать разницы.
Допускаются ли реализации таким образом, чтобы они расходились при одинаковом режиме округления? Существуют ли флаги компилятора для устранения или минимизации расхождений?
Подробнее здесь:
https://stackoverflow.com/questions/798 ... -precision