[ Web Proxy ]
URL:
Viewing: https://cppreference.com/cpp/numeric/complex/polar [Back]  [Original]

std::polar(std::complex) - cppreference.com
cppreference.com
Namespaces
Variants

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

#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) [edit]
returns the phase angle
(function template) [edit]
complex base e exponential
(function template) [edit]

Web Proxy Viewer  |  New URL  |  Original Page