Namespaces
Variants

std:: pow (std::complex)

From cppreference.net
定义于头文件 <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 < /* common-type */ >

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 < /* common-type */ >

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

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

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

std:: complex < /* common-type */ >

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

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

pow ( const NonComplex & x, const std:: complex < T > & y ) ;
(C++23 起)
1-4) 计算复数 x 的复数幂次 y ,其中第一个参数沿负实轴设置分支切割线。非复数参数将被视为具有正零虚部的复数。
A-C) 提供了额外的重载。 NonComplex 不是 std::complex 的特化。
(since C++11)

目录

参数

x - 底数
y - 指数

返回值

1-4) 若未发生错误,则返回复数幂 x y
错误和特殊情况处理方式如同该操作通过 std:: exp ( y * std:: log ( x ) ) 实现。
std:: pow ( 0 , 0 ) 的结果由具体实现定义。
A-C) (2-4)

注释

重载 (1) 在 C++98 中提供,以匹配 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 > 且另一个参数具有类型 T2 std:: 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.0, 2.0);
    std::cout << "(1,2)^2 = " << std::pow(z, 2) << '\n';
    std::complex<double> z2(-1.0, 0.0); // -1 的平方根
    std::cout << "-1^0.5 = " << std::pow(z2, 0.5) << '\n';
    std::complex<double> z3(-1.0, -0.0); // 分支切割的另一侧
    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';
}

输出:

(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)
对数值进行给定次幂运算 ( x y )
(函数)
将函数 std::pow 应用于两个 valarray 或一个 valarray 与一个值
(函数模板)
C 文档 关于 cpow