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/w/cpp/numeric/complex/exp

Spec-Zone.ru

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