# std::pow(std::complex)

< cpp‎ | numeric‎ | complex

定义于头文件 `<complex>` |  |
template< class T > complex<T> pow( const complex<T>& x, const complex<T>& y); | (1) |
template< class T > complex<T> pow( const complex<T>& x, const T& y); | (2) |
template< class T > complex<T> pow( const T& x, const complex<T>& y); | (3) |
template< class T, class U > complex</*Promoted*/> pow( const complex<T>& x, const complex<U>& y); | (4) | (C++11 起)
template< class T, class U > complex</*Promoted*/> pow( const complex<T>& x, const U& y); | (5) | (C++11 起)
template< class T, class U > complex</*Promoted*/> pow( const T& x, const complex<U>& y); | (6) | (C++11 起)

计算复数 `x` 的 `y` 次复数幂，首参数的分支切割沿负实轴。

4-6) 为所有算术类型提供额外重载，使得 1. 若任一参数为 long double 或 std::complex<long double> ，则转型两个参数为 std::complex<long double> 2. 否则，若任一参数为 double 、 std::complex<double> 或整数类型，则转型两个参数为 std::complex<double> 3. 否则，若任一参数为 float 或 std::complex<float> ，则转型两个参数为 std::complex<float> | (C++11 起)

### 参数

x | - | 作为底数的复数值
y | - | 作为指数的复数值

### 返回值

若不出现错误，则返回复幂 xy
。

错误和特殊情况按照如同以 std::exp(y*std::log(x)) 实现运算一般处理，

std::pow(0, 0) 的结果是实现定义的。

### 示例

    #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);  // -1 的平方根
        std::cout << "-1^0.5 = " << std::pow(z2, 0.5) << '\n';

        std::complex<double> z3(-1, -0.0);  // 切割的另一侧
        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';
    }

输出：

    (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)

### 参阅

sqrt(std::complex) | 右半平面范围中的复平方根 (函数模板)
pow powf powl (C++11)(C++11) | 求某数的给定次幂（ \(\small{x^y}\)xy ） (函数)
pow(std::valarray) | 应用函数 std::pow 到二个 valarray 或一个 valarray 与一个值 (函数模板)