std::pow(std::complex)(3)

NAME
std::pow(std::complex) - std::pow(std::complex)

Synopsis
   Defined in header <complex>
   template< class T > (1)
   complex<T> pow( const complex<T>& x, const complex<T>& y );
   template< class T > (2)
   complex<T> pow( const complex<T>& x, const T& y );
   template< class T > (3)
   complex<T> pow( const T& x, const complex<T>& y );
   template< class T, class U >
   complex</*Promoted*/> pow( const complex<T>& x, const complex<U>& (4) (since C++11)
   y );
   template< class T, class U > (5) (since C++11)
   complex</*Promoted*/> pow( const complex<T>& x, const U& y );
   template< class T, class U > (6) (since C++11)
   complex</*Promoted*/> pow( const T& x, const complex<U>& y );
   1-3) Computes complex x raised to a complex power y with a branch cut along the
   negative real axis for the first argument.
   4-6) Additional overloads are provided for all arithmetic types, such
   that
      1. If either argument is long double or std::complex<long double>,
      then both arguments are cast to std::complex<long double> (since C++11)
      2. Otherwise, if either argument is double, std::complex<double> or
      integer type, then both arguments are cast to std::complex<double>
      3. Otherwise, if either argument is float or std::complex<float>,
      then both arguments are cast to std::complex<float>

Parameters
   x - base as a complex value
   y - exponent as a complex value

Return value
   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.

Example
// Run this code
 #include <iostream>
 #include <complex>
 int main()
 {
     std::cout << std::fixed;
     std::complex<double> z(1, 2);
     std::cout << "(1,2)^2 = " << std::pow(z, 2) << '\n';
     std::complex<double> z2(-1, 0); // square root of -1
     std::cout << "-1^0.5 = " << std::pow(z2, 0.5) << '\n';
     std::complex<double> z3(-1, -0.0); // other side of the cut
     std::cout << "(-1, -0)^0.5 = " << std::pow(z3, 0.5) << '\n';
     std::complex<double> i(0, 1); // 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)

See also
   sqrt(std::complex) complex square root in the range of the right half-plane
                      (function template)
   pow
   powf raises a number to the given power (\(\small{x^y}\)x^y)
   powl (function)
   (C++11)
   (C++11)
                      applies the function std::pow to two valarrays or a valarray and
   pow(std::valarray) a value
                      (function template)