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 一个负数。
如果我创建一个振幅为负 (-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 一个负数。