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)
См. также
| комплекный натуральный логарифм с разрывами ветвей вдоль отрицательной вещественной оси (функция-шаблон) |
|
|
(C++11)(C++11) | возвращает e в степени данного значения (\({\small e^x}\)ex) (функция) |
применяет функцию std::exp к каждому элементу valarray (функция-шаблон) |
|
| создаёт комплексное число из модуля и фазового угла (функция-шаблон) |
|
Документация C для cexp |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/complex/exp