std::pow(std::complex)
来自cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
| 在标头 <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)。
注解
C++98 提供重载 (1) 以匹配 std::pow 的多个重载 (2)。那些重载通过 LWG 问题 550 的解决方案移除,而重载 (1) 通过 LWG 问题 844 的解决方案移除。
额外重载不需要以 (A-C) 的形式提供。它们只需要能够对它们的第一个实参 base 和第二个实参 exponent 满足以下要求:
|
如果
|
(C++23 前) |
|
如果一个实参具有 如果 |
(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) |
求某数的给定次幂(xy) (函数) |
| 应用函数 std::pow 到二个 valarray 或一个 valarray 与一个值 (函数模板) | |
cpow 的 C 文档
| |