std::pow(std::complex)
<complex>
std::complex <T> pow( const std::complex <T>& x, int y );
std::complex <T> pow( const std::complex <T>& x, const std::complex <T>& y );
std::complex <T> pow( const std::complex <T>& x, const T& y );
std::complex <T> pow( const T& x, const std::complex <T>& y );
<complex>
std::complex </* common-type */>
std::complex <std::common_type_t <T1, T2>>
std::complex </* common-type */>
std::complex <std::common_type_t <T, NonComplex>>
std::complex </* common-type */>
std::complex <std::common_type_t <T, NonComplex>>
Contents
[edit] Parameters
[edit] Return value
, is returned.
[edit] Notes
Overload (1) was provided in C++98 to match the extra overloads (2) of std::pow . Those overloads were removed by the resolution of LWG issue 550, and overload (1) was removed by the resolution of LWG issue 844.
The additional overloads are not required to be provided exactly as (A-C). They only need to be sufficient to ensure that for their first argument base and second argument exponent:
If base and/or exponent has type std::complex <T>:
- If base and/or exponent has type std::complex <long double> or long double, then
std::pow(base, exponent)
has the same effect asstd::pow
(std::complex <long double>(base),
std::complex <long double>(exponent)). - Otherwise, if base and/or exponent has type std::complex <double>, double, or an integer type, then
std::pow(base, exponent)
has the same effect asstd::pow
(std::complex <double>(base),
std::complex <double>(exponent)). - Otherwise, if base and/or exponent has type std::complex <float> or float, then
std::pow(base, exponent)
has the same effect asstd::pow
(std::complex <float>(base),
std::complex <float>(exponent)).
If one argument has type std::complex <T1> and the other argument has type T2
or std::complex <T2>, then std::pow(base, exponent)
has the same effect as std::pow
(std::complex <std::common_type_t <T1, T2>>(base),
std::complex <std::common_type_t <T1, T2>>(exponent)).
If std::common_type_t <T1, T2> is not well-formed, then the program is ill-formed.
(since C++23)[edit] Example
#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); // square root of -1 std::cout << "-1^0.5 = " << std::pow (z2, 0.5) << '\n'; std::complex <double> z3(-1.0, -0.0); // other side of the cut 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'; }
Output:
(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)