Для преобразования некоторых координат в формат GPS я использую комплексные числа (std :: complex).Алгоритм должен быть скомпилирован MSVC (2015) и g ++ (7.3.0).
Я получил большое отклонение в вычислениях для g ++, которое, вероятно, намного больше, чем обычная точность с плавающей запятой, в то время как на MSVC это правильно.Отклонение составляет более 0,04.
Для MSVC не имеет значения, если я беру низкую или высокую точность (/ fp: быстрая или / fp: точная).Для g ++ я попробовал также "-ffloat-store" и отключить SSE (2), но это не помогло.Также пробовал библиотеку MPC (http://www.multiprecision.org/mpc/home.html),, но приводит к тому же результату.
Для g ++ текущие флаги:
-m64 -mfpmath = sse -msse2 -fno-rtti-fopenmp -g -std = gnu ++ 1y
std::complex<double> val = std::complex<double>(-1.8425031517782417e-07, -0.0);
std::complex<double> testExp = std::pow(val, 0.5);
std::cout << "textExp: " << std::setprecision(30) << testExp << std::endl;
На MSVC я получил ожидаемый результат (2.628360765983583e-20, 0.0004292438877582582 ), но на g ++ я получаю фактический(2.628360765983583e-20, -0.0004292438877582582 ).
Таким образом, мнимая часть неверна для gcc.
Любая идея будет оценена.