complex_pow
complex_pow (복소수 거듭제곱)
복소수 x를 복소수 거듭제곱 y로 올리는 함수예요. 첫 번째 인자에 대해 음의 실수축을 따라 분지절단이 있어요. C++11부터 추가 오버로드를 쓸 수 있어요.
출처: cppreference
본문
<complex> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.
template< class T >
std::complex<T> pow( const std::complex<T>& x, int y );
(1) (until 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> 헤더에 정의되어 있어요.
template< class T1, class T2 >
std::complex</* common-type */>
pow( const std::complex<T1>& x, const std::complex<T2>& y );
(A) (until 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 );
(since C++23)
template< class T, class NonComplex >
std::complex</* common-type */>
pow( const std::complex<T>& x, const NonComplex& y );
(B) (until C++23)
template< class T, class NonComplex >
std::complex<std::common_type_t<T, NonComplex>>
pow( const std::complex<T>& x, const NonComplex& y );
(since C++23)
template< class T, class NonComplex >
std::complex</* common-type */>
pow( const NonComplex& x, const std::complex<T>& y );
(C) (until C++23)
template< class T, class NonComplex >
std::complex<std::common_type_t<T, NonComplex>>
pow( const NonComplex& x, const std::complex<T>& y );
(since C++23)
- 1-4) 첫 번째 인자에 대해 음의 실수축을 따라 분지절단이 있는, 복소수 x를 복소수 거듭제곱 y로 올린 값을 계산해요. 복소수가 아닌 인자는 허수 성분이 양의 0인 복소수처럼 취급돼요.
- A-C) 추가 오버로드가 제공돼요. NonComplex는 std::complex의 특수화가 아니에요.
(C++11부터)
매개변수 (Parameters)
- x — 밑
- y — 지수
반환값 (Return value)
- 1-4) 오류가 없다면 복소수 거듭제곱 xʸ를 반환해요.
- 오류와 특수한 경우는 작업이
std::exp(y * std::log(x))로 구현된 것처럼 처리돼요. std::pow(0, 0)의 결과는 구현 정의예요.- A-C) (2-4)와 동일해요.
참고 (Notes)
오버로드 (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))과 같은 효과예요.