C ++从复数中获取负数

c++ get negative numbers from complex

如果我创建一个振幅为负 (-1) 且无相位 (0) 的复数,因此对应于 -1 的两倍,并将其转换回振幅和相位,则振幅不是负数

complex<double> c;
c = polar(-1.0, 0.0);
cout << c << ", " << abs(c) << ", " << arg(c) << endl;

输出是

(-1, 0), 1, -3.14159

应该是

(-1, 0), -1, 0

如何取回正确的振幅值?

您将实部和虚部与绝对值和相位混淆了。

尝试:

cout << c << ", " << real(c) << ", " << imag(c) << endl;

此外,绝对值永远不能为负 by definition of polar coordinates。你可以试试看:

complex<double> c;
c = polar(1.0, M_PI); //don't forget to include <cmath>
cout << c << ", " << abs(c) << ", " << arg(c) << endl;

这将翻转相位并使半径在极坐标的另一个方向上。

从数学的角度来看,量级(或模数绝对值 ) 的复数应为正数(或 0)。

查看 std::polar 的参考页,其中指定:

Returns a complex number with magnitude r and phase angle theta. The behavior is undefined if r is negative or NaN, or if theta is infinite (since C++17)

你没有指定你使用的是什么编译器,但它足以给你 "correct" 结果,一个幅度为 1 且相位角为 -π 的复数。 使用 g++ 6.1 (-std=c++14) 测试相同的片段给了我:

(-1,-0), 1, -3.14159

唯一不同的是负零,与负角一致

另请注意,只有在发生某些错误时,像 std::abs 这样的函数才能 return 一个负数。