std::complex</* common-type */>
std::complex</* common-type */>
1-4) Computes complex x raised to a complex power y with a branch cut along the negative real axis for the first argument. Non-complex arguments are treated as complex numbers with positive zero imaginary component.
A-C)Additional overloads are provided.
NonComplex
is not a specialization of
std::complex.
(since C++11) [edit] Parameters [edit] Return value1-4) If no errors occur, the complex power xy
, is returned.
Errors and special cases are handled as if the operation is implemented by
std::exp(y * std::log(x)).
The result of
std::pow(0, 0)is implementation-defined.
A-C) Same as (2-4).
[edit] NotesOverload (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>:
std::pow(base, exponent)
has the same effect as std::pow
(std::complex<long double>(base),std::pow(base, exponent)
has the same effect as std::pow
(std::complex<double>(base),std::pow(base, exponent)
has the same effect as std::pow
(std::complex<float>(base),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)[edit] See also
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4