std::polar(std::complex)
From cppreference.com
| Defined in header <complex>
|
||
template< class T >
std::complex<T> polar( const T& r, const T& theta = T() );
|
||
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.
Parameters
| r | - | magnitude |
| theta | - | phase angle |
Return value
A complex number determined by r and theta.
Notes
std::polar(r, theta) is equivalent to any of the following expressions:
r * std::exp(theta * 1i)r * (cos(theta) + sin(theta) * 1i)std::complex(r * cos(theta), r * sin(theta)).
Using polar instead of exp can be about 4.5x faster in vectorized loops.
Example
Run this code
#include <cmath>
#include <complex>
#include <iomanip>
#include <iostream>
#include <numbers>
using namespace std::complex_literals;
int main()
{
constexpr auto _2{std::numbers::pi / 2.0};
constexpr auto mag{1.0};
std::cout
<< std::fixed << std::showpos << std::setprecision(1)
<< " : polar: exp: complex: trig:\n";
for (int n{}; n != 4; ++n)
{
const auto {n * _2};
std::cout << std::setw(4) << 90 * n << " "
<< std::polar(mag, ) << " "
<< mag * std::exp( * 1.0i) << " "
<< std::complex(mag * cos(), mag * sin()) << " "
<< mag * (cos() + 1.0i * sin()) << '\n';
}
}
Output:
: polar: exp: complex: trig:
+0 (+1.0,+0.0) (+1.0,+0.0) (+1.0,+0.0) (+1.0,+0.0)
+90 (+0.0,+1.0) (+0.0,+1.0) (+0.0,+1.0) (+0.0,+1.0)
+180 (-1.0,+0.0) (-1.0,+0.0) (-1.0,+0.0) (-1.0,+0.0)
+270 (-0.0,-1.0) (-0.0,-1.0) (-0.0,-1.0) (-0.0,-1.0)
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2459 | C++98 | behavior unclear for some inputs | made undefined |
| LWG 2870 | C++98 | default value of parameter theta not dependent
|
made dependent |
See also
| returns the magnitude of a complex number (function template) | |
| returns the phase angle (function template) | |
| complex base e exponential (function template) |