std :: arg возвращает неверное значение для реальных входных данных (используя компилятор MSV C) - PullRequest
3 голосов
/ 02 мая 2020

Я пытаюсь выполнить некоторые простые фазовые вычисления в 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

...