命名空间
变体
操作

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</* 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 的特化。
(自 C++11 起)

内容

[编辑] 参数

x - 底数
y - 指数

[编辑] 返回值

1-4) 如果没有错误发生,则返回复数次幂 xy
错误和特殊情况的处理方式与操作由 std::exp(y * std::log(x)) 实现的情况相同。
std::pow(0, 0) 的结果是实现定义的。
A-C)(2-4) 相同。

[编辑] 备注

重载 (1) 在 C++98 中提供,以匹配 std::pow 的额外重载 (2)。这些重载在解决 LWG issue 550 时被删除,重载 (1) 在解决 LWG issue 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 起)

[edit] 示例

#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); // square root of -1
    std::cout << "-1^0.5 = " << std::pow(z2, 0.5) << '\n';
 
    std::complex<double> z3(-1.0, -0.0); // other side of the cut
    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)

[edit] 另请参见

在右半平面范围内的复数平方根
(函数模板) [edit]
(C++11)(C++11)
将一个数字提升到给定幂 (xy)
(函数) [edit]
将函数 std::pow 应用于两个 valarrays 或一个 valarray 和一个值
(函数模板) [edit]
C 文档 for cpow