Namespaces
Variants

std:: pow (std::complex)

From cppreference.net
헤더 파일에 정의됨 <complex>
template < class T >
std:: complex < T > pow ( const std:: complex < T > & x, int y ) ;
(1) (C++11 이전)
template < class T >
std:: complex < T > pow ( const std:: complex < T > & x, const std:: complex < T > & y ) ;
(2)
template < class T >
std:: complex < T > pow ( const std:: complex < T > & x, const T & y ) ;
(3)
template < class T >
std:: complex < T > pow ( const T & x, const std:: complex < T > & y ) ;
(4)
추가 오버로드 (C++11 이후)
헤더 파일에 정의됨 <complex>
(A)
template < class T1, class T2 >

std:: complex < /* 공통 타입 */ >

pow ( const std:: complex < T1 > & x, const std:: complex < T2 > & y ) ;
(C++23 이전)
template < class T1, class T2 >

std:: complex < std:: common_type_t < T1, T2 >>

pow ( const std:: complex < T1 > & x, const std:: complex < T2 > & y ) ;
(C++23 이후)
(B)
template < class T, class NonComplex >

std:: complex < /* 공통-타입 */ >

pow ( const std:: complex < T > & x, const NonComplex & y ) ;
(C++23 이전)
template < class T, class NonComplex >

std:: complex < std:: common_type_t < T, NonComplex >>

pow ( const std:: complex < T > & x, const NonComplex & y ) ;
(C++23 이후)
(C)
template < class T, class NonComplex >

std:: complex < /* common-type */ >

pow ( const NonComplex & x, const std:: complex < T > & y ) ;
(C++23 이전)
template < class T, class NonComplex >

std:: complex < std:: common_type_t < T, NonComplex >>

pow ( const NonComplex & x, const std:: complex < T > & y ) ;
(C++23 이후)
1-4) 첫 번째 인자에 대해 음의 실수 축을 따라 가지 절단(branch cut)을 적용하여 복소수 x 를 복소수 y 제곱으로 계산합니다. 비복소수 인자는 양의 영 허수 성분을 가진 복소수로 처리됩니다.
A-C) 추가적인 오버로드가 제공됩니다. NonComplex std::complex 의 특수화(specialization)가 아닙니다.
(since C++11)

목차

매개변수

x - 밑수
y - 지수

반환값

1-4) 오류가 발생하지 않으면, 복소수 거듭제곱 x y
이 반환됩니다.
오류 및 특수한 경우들은 이 연산이 std:: exp ( y * std:: log ( x ) ) 로 구현된 것처럼 처리됩니다.
std:: pow ( 0 , 0 ) 의 결과는 구현에 따라 정의됩니다.
A-C) (2-4) 와 동일합니다.

참고 사항

오버로드 (1) 는 C++98에서 std::pow 의 추가 오버로드 (2) 와 일치시키기 위해 제공되었습니다. 해당 오버로드들은 LWG 이슈 550 의 해결에 의해 제거되었으며, 오버로드 (1) LWG 이슈 844 의 해결에 의해 제거되었습니다.

추가 오버로드는 반드시 (A-C) 와 정확히 동일하게 제공될 필요는 없습니다. 이들은 첫 번째 인수 base 와 두 번째 인수 exponent 에 대해 다음을 보장하기에 충분하기만 하면 됩니다:

base 및/또는 exponent std:: complex < T > 타입을 가지는 경우:

  • base 및/또는 exponent std:: complex < long double < 또는 long double 타입을 가지는 경우, std::pow(base, exponent) std::pow ( std:: complex < long double > ( base ) ,
    std:: complex < long double > ( exponent ) )
    와 동일한 효과를 가집니다.
  • 그렇지 않고 base 및/또는 exponent std:: complex < double > , double , 또는 정수 타입을 가지는 경우, std::pow(base, exponent) std::pow ( std:: complex < double > ( base ) ,
    std:: complex < double > ( exponent ) )
    와 동일한 효과를 가집니다.
  • 그렇지 않고 base 및/또는 exponent std:: complex < float > 또는 float 타입을 가지는 경우, std::pow(base, exponent) std::pow ( std:: complex < float > ( base ) ,
    std:: complex < float > ( exponent ) )
    와 동일한 효과를 가집니다.
(C++23 이전)

한 인자가 std:: complex < T1 > 타입을 가지고 다른 인자가 T2 타입 또는 std:: complex < T2 > 타입을 가지는 경우, std::pow(base, exponent) std::pow ( std:: complex < std:: common_type_t < T1, T2 >> ( base ) ,
std:: complex < std:: common_type_t < T1, T2 >> ( exponent ) )
와 동일한 효과를 가집니다.

만약 std:: common_type_t < T1, T2 > 이 올바르게 형성되지 않으면, 프로그램은 ill-formed입니다.

(C++23부터)

예제

#include <complex>
#include <iostream>
int main()
{
    std::cout << std::fixed;
    std::complex<double> z(1.0, 2.0);
    std::cout << "(1,2)^2 = " << std::pow(z, 2) << '\n';
    std::complex<double> z2(-1.0, 0.0); // -1의 제곱근
    std::cout << "-1^0.5 = " << std::pow(z2, 0.5) << '\n';
    std::complex<double> z3(-1.0, -0.0); // 절단의 다른 쪽
    std::cout << "(-1,-0)^0.5 = " << std::pow(z3, 0.5) << '\n';
    std::complex<double> i(0.0, 1.0); // i^i = exp(-pi / 2)
    std::cout << "i^i = " << std::pow(i, i) << '\n';
}

출력:

(1,2)^2 = (-3.000000,4.000000)
-1^0.5 = (0.000000,1.000000)
(-1,-0)^0.5 = (0.000000,-1.000000)
i^i = (0.207880,0.000000)

참고 항목

우측 반평면 범위에서의 복소수 제곱근
(함수 템플릿)
(C++11) (C++11)
주어진 거듭제곱으로 수를 올림 ( x y )
(함수)
함수 std::pow 을 두 valarray에 또는 valarray와 값에 적용
(함수 템플릿)
C 문서 for cpow