std::exp(std::complex)

来自cppreference.com
< cpp‎ | numeric‎ | complex
 
 
 
 
在标头 <complex> 定义
template< class T >
std::complex<T> exp( const std::complex<T>& z );

计算 z 的底 e 指数,即 e (欧拉数, 2.7182818 )的 z 次幂。

参数

z - 复数值

返回值

若不出现错误,则返回 ez 次幂, ez

错误处理及特殊值

报告的错误与 math_errhandling 一致。

若实现支持 IEEE 浮点算术,则

  • std::exp(std::conj(z)) == std::conj(std::exp(z))
  • z(±0,+0) ,则结果为 (1,+0)
  • z(x,+∞) (对于任何有限 x ),则结果为 (NaN,NaN) 并引发 FE_INVALID
  • z(x,NaN) (对于任何有限 x ),则结果为 (NaN,NaN) 并可能引发 FE_INVALID
  • z(+∞,+0) ,则结果为 (+∞,+0)
  • z(-∞,y) (对于任何有限 y ),则结果为 +0cis(y)
  • z(+∞,y) (对于任何有限非零 y ),则结果为 +∞cis(y)
  • z(-∞,+∞) ,则结果为 (±0,±0) (符号未指定)。
  • z(+∞,+∞) ,则结果为 (±∞,NaN) 并引发 FE_INVALID (实部符号未指定)
  • z(-∞,NaN) ,则结果为 (±0,±0) (符号未指定)
  • z(+∞,NaN) ,则结果为 (±∞,NaN) (实部符号未指定)
  • z(NaN,+0) ,则结果为 (NaN,+0)
  • z(NaN,y) (对于任何非零 y ),则结果为 (NaN,NaN) 并可能引发 FE_INVALID
  • z(NaN,NaN) ,则结果为 (NaN,NaN)

其中 cis(y)cos(y) + i sin(y)

注解

对于 z = x+iy ,复指数函数 ez
等于 ex
cis(y)
,或 ex
(cos(y) + i sin(y))

指数函数在复平面上是整函数且无分支切割。

下列公式在实部为 0 时有等价的结果:

此情况下 exp 可能会有 4.5 倍的耗时。应该以这些形式之一代替参数实部为字面 0 的 exp 调用。虽然以运行时检查 z.real() == 0 避免 exp 并没有收益。

示例

#include <complex>
#include <iostream>
 
int main()
{
   const double pi = std::acos(-1);
   const std::complex<double> i(0, 1);
 
   std::cout << std::fixed << " exp(i*pi) = " << std::exp(i * pi) << '\n';
}

输出:

exp(i*pi) = (-1.000000,0.000000)

参阅

沿负实轴切割的复自然对数
(函数模板)
(C++11)(C++11)
返回 e 的给定次幂(ex
(函数)
应用函数 std::exp 到 valarray 的每个元素
(函数模板)