Я пытаюсь выполнить некоторые простые фазовые вычисления в C ++ и обнаружил, что иногда получаю неправильные результаты от std::arg
при использовании реальных значений в качестве входных данных.
Согласно документации на cppreference :
Для перегруженных, двойных, длинных двойных и всех целочисленных типов предусмотрены дополнительные перегрузки, которые рассматриваются как комплексные числа с нулевым мнимым компонентом.
Однако, похоже, это не так, потому что эти два вызова возвращают разные результаты.
auto x1 = std::arg(std::complex<double>{ -1.0, 0.0 });
// x1 = PI (3.14159...)
auto x2 = std::arg(-1.0);
// x2 = 0
Я только что нашел ошибку в реализации стандартной библиотеки MSV C, или я пропустил что-то очевидное?
Информация о компиляторе:
Microsoft (R) C / C ++ Оптимизирующая версия компилятора 19.21.27702.2 для x86