std::pow(std::complex)

来自cppreference.com
< cpp‎ | numeric‎ | complex
 
 
 
 
在标头 <complex> 定义
template< class T >
std::complex<T> pow( const std::complex<T>& x, int y );
(1) (C++11 前)
template< class T >
std::complex<T> pow( const std::complex<T>& x, const std::complex<T>& y );
(2)
template< class T >
std::complex<T> pow( const std::complex<T>& x, const T& y );
(3)
template< class T >
std::complex<T> pow( const T& x, const std::complex<T>& y );
(4)
额外重载 (C++11 起)
在标头 <complex> 定义
(A)
template< class T1, class T2 >

std::complex</* 公共类型 */>

    pow( const std::complex<T1>& x, const std::complex<T2>& y );
(C++23 前)
template< class T1, class T2 >

std::complex<std::common_type_t<T1, T2>>

    pow( const std::complex<T1>& x, const std::complex<T2>& y );
(C++23 起)
(B)
template< class T, class NonComplex >

std::complex</* 公共类型 */>

    pow( const std::complex<T>& x, const NonComplex& exponent );
(C++23 前)
template< class T, class NonComplex >

std::complex<std::common_type_t<T, NonComplex>>

    pow( const std::complex<T>& x, const NonComplex& exponent );
(C++23 起)
(C)
template< class T, class NonComplex >

std::complex</* 公共类型 */>

    pow( const NonComplex& base, const std::complex<T>& y );
(C++23 前)
template< class T, class NonComplex >

std::complex<std::common_type_t<T, NonComplex>>

    pow( const NonComplex& base, const std::complex<T>& y );
(C++23 起)
1-4) 计算复数 xy 次复数幂,首参数的分支切割线沿负实轴。非复数实参被处理为拥有正零虚部的复数。
A-C) 提供额外重载。其中 NonComplex 不是 std::complex 的特化。
(C++11 起)

参数

x - 底数
y - 指数

返回值

1-4) 如果不出现错误,那么返回复幂 xy
错误和特殊情况按照如同以 std::exp(y * std::log(x)) 实现运算一般处理。
std::pow(0, 0) 的结果由实现定义。
A-C)(2-4)

注解

C++98 提供重载 (1) 以匹配 std::pow 的多个重载 (2)。那些重载通过 LWG 问题 550 的解决方案移除,而重载 (1) 通过 LWG 问题 844 的解决方案移除。

额外重载不需要以 (A-C) 的形式提供。它们只需要能够对它们的第一个实参 base 和第二个实参 exponent 满足以下要求:

如果 base 和/或 exponent 具有 std::complex<T> 类型:

  • 如果 base 和/或 exponent 具有 std::complex<long double>long double 类型,那么 std::pow(base, exponent)std::pow(std::complex<long double>(base),
             std::complex<long double>(exponent))
    的效果相同。
  • 否则,如果 base 和/或 exponent 具有 std::complex<double>double 或整数类型,那么 std::pow(base, exponent)std::pow(std::complex<double>(base),
             std::complex<double>(exponent))
    的效果相同。
  • 否则,如果 base 和/或 exponent 具有 std::complex<float>float 类型,那么 std::pow(base, exponent)std::pow(std::complex<float>(base),
             std::complex<float>(exponent))
    的效果相同。
(C++23 前)

如果一个实参具有 std::complex<T1> 类型,而另一个实参具有 T2std::complex<T2> 类型,那么 std::pow(base, exponent)std::pow(std::complex<std::common_type_t<T1, T2>>(base),
         std::complex<std::common_type_t<T1, T2>>(exponent))
的效果相同。

如果 std::common_type_t<T1, T2> 非良构,那么程序也非良构。

(C++23 起)

示例

#include <complex>
#include <iostream>
 
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)

参阅

右半平面范围中的复平方根
(函数模板)
(C++11)(C++11)
求某数的给定次幂(xy
(函数)
应用函数 std::pow 到二个 valarray 或一个 valarray 与一个值
(函数模板)