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