Spec-Zone.ru › C++

std::exp(std::complex)

Определено в заголовочном файле <complex>
template< class T > 
std::complex<T> exp( const std::complex<T>& z );

Вычисляет экспоненту с основанием e для z, то есть число e (число Эйлера, 2.7182818) в степени z.

Параметры

z - комплексное значение

Возвращаемое значение

Если ошибок не возникает, возвращается e в степени z, \(\small e^z\)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)

где \(\small{\rm cis}(y)\)cis(y) — это \(\small \cos(y)+{\rm i}\sin(y)\)cos(y) + i sin(y).

Примечания

Комплексная экспоненциальная функция \(\small e^z\)ez для \(\small z = x + {\rm i}y\)z = x+iy равна \(\small e^x {\rm cis}(y)\)ex cis(y), или \(\small e^x (\cos(y)+{\rm i}\sin(y))\)ex (cos(y) + i sin(y)).

Экспоненциальная функция является целой функцией на комплексной плоскости и не имеет разрезов ветви.

Следующие выражения дают эквивалентные результаты, когда действительная часть равна 0:

  • std::exp(std::complex<float>(0, theta))
  • std::complex<float>(cosf(theta), sinf(theta))
  • std::polar(1.f, theta)

В этом случае exp может работать примерно в 4,5 раза медленнее. Вместо вызова exp с аргументом, действительная часть которого равна буквальному значению 0, следует использовать одну из других форм. Однако нет смысла пытаться избежать exp с помощью проверки z.real() == 0 во время выполнения.

Пример

#include <cmath>
#include <complex>
#include <iostream>

int main()
{
   const double pi = std::acos(-1.0);
   const std::complex<double> i(0.0, 1.0);

   std::cout << std::fixed << " exp(i * pi) = " << std::exp(i * pi) << '\n';
}

Вывод:

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

См. также

log(std::complex)
комплексный натуральный логарифм с разрезами ветви вдоль отрицательной вещественной оси
(шаблон функции)
expexpfexpl
(C++11)(C++11)
возвращает e в заданной степени (\({\small e^x}\)ex)
(функция)
exp(std::valarray)
применяет функцию std::exp к каждому элементу valarray
(шаблон функции)
polar
создаёт комплексное число по модулю и углу фазы
(шаблон функции)
Документация по C для cexp

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/complex/exp

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API