Namespaces
Variants

std:: polar (std::complex)

From cppreference.net
헤더에 정의됨 <complex>
template < class T >
std:: complex < T > polar ( const T & r, const T & theta = T ( ) ) ;

크기 r 와 위상각 theta 를 갖는 복소수를 반환합니다.

r 이 음수이거나 NaN이거나, theta 가 무한대인 경우 동작은 정의되지 않습니다.

목차

매개변수

r - 크기
theta - 위상각

반환값

r theta 로 결정되는 복소수.

참고 사항

std :: polar ( r, theta ) 는 다음 표현식들 중 어느 하나와 동등합니다:

  • r * std:: exp ( theta * 1i )
  • r * ( cos ( theta ) + sin ( theta ) * 1i )
  • std:: complex ( r * cos ( theta ) , r * sin ( theta ) ) .
**참고:** 제공된 HTML 코드에는 번역이 필요한 일반 텍스트가 포함되어 있지 않습니다. 모든 내용이 HTML 태그, 속성, C++ 코드( 태그 내부)로 구성되어 있으며, 이러한 요소들은 번역에서 제외하도록 지정되었습니다.

벡터화된 루프에서 exp 대신 polar를 사용하는 것이 4.5배 더 빠를 수 있습니다.

예제

#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';
    }
}

출력:

   θ: │ 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)

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 2459 C++98 일부 입력에 대해 동작이 불명확함 미정의 동작으로 지정됨
LWG 2870 C++98 매개변수 theta 의 기본값이 비의존적 의존적으로 변경됨

참고 항목

복소수의 크기를 반환합니다
(함수 템플릿)
위상각을 반환합니다
(함수 템플릿)
복소수 밑 e 지수 함수
(함수 템플릿)