# std::pow(std::complex)

< cpp‎ | numeric‎ | complex

C++
 Language Standard library headers Concepts Utilities library Strings library Containers library Algorithms library Iterators library Numerics library Input/output library Localizations library Regular expressions library (C++11) Atomic operations library (C++11) Thread support library (C++11)

Numerics library
 Common mathematical functions Floating-point environment Complex numbers Numeric arrays Pseudo-random number generation Compile-time rational arithmetic (C++11) Generic numeric operations iota (C++11) accumulate inner_product adjacent_difference partial_sum

std::complex
Member functions
Non-member functions
 real imag abs arg norm conj proj (C++11) polar operator""ioperator""ifoperator""il (C++14)(C++14)(C++14)
Exponential functions
Power functions
pow
Trigonometric functions
 asin (C++11) acos (C++11) atan (C++11)
Hyperbolic functions
 asinh (C++11) acosh (C++11) atanh (C++11)

 Defined in header `` template< class T > complex pow( const complex& x, const complex& y); template< class T > complex pow( const complex& x, const T& y); template< class T > complex pow( const T& x, const complex& y); template< class T, class U > complex pow( const complex& x, const complex& y); (since C++11) template< class T, class U > complex pow( const complex& x, const U& y); (since C++11) template< class T, class U > complex pow( const T& x, const complex& y); (since C++11)

Computes complex `x` raised to a complex power `y` with a branch cut along the negative real axis for the first argument.

1. If either argument is long double or std::complex<long double>, then both arguments are cast to std::complex<long double>
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>

## Contents

### 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

```#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)```