std::polar(std::complex) - cppreference.com (original) (raw)

| | | | | ---------------------------------------------------------------------------------------------------- | | | | 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.

[edit] Parameters

r - magnitude
theta - phase angle

[edit] Return value

A complex number determined by r and theta.

[edit] Notes

std::polar(r, theta) is equivalent to any of the following expressions:

Using polar instead of exp can be about 4.5x faster in vectorized loops.

[edit] Example

#include #include #include #include #include using namespace std::complex_literals;   int main() { constexpr auto π_2{std:🔢: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)

[edit] 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

[edit] See also