std::log(std::complex)
Определён в заголовочном файле <complex> | ||
|---|---|---|
template< class T > std::complex<T> log( const std::complex<T>& z ); |
Вычисляет комплексный натуральный логарифм (по основанию e) комплексного значения z с разрезом ветви вдоль отрицательной вещественной оси.
Параметры
| z | - | комплексное значение |
Возвращаемое значение
Если ошибок не возникает, возвращается комплексный натуральный логарифм z в диапазоне полосы на интервале [−iπ, +iπ] вдоль мнимой оси и математически неограниченный вдоль вещественной оси.
Обработка ошибок и особые значения
Об ошибках сообщается в соответствии с math_errhandling.
Если реализация поддерживает арифметику с плавающей точкой IEEE,
- Функция непрерывна на разрезе ветви с учётом знака мнимой части
std::log(std::conj(z)) == std::conj(std::log(z))- Если
zравно(-0,+0), результатом является(-∞,π)и возникаетFE_DIVBYZERO - Если
zравно(+0,+0), результатом является(-∞,+0)и возникаетFE_DIVBYZERO - Если
zравно(x,+∞)(для любого конечного x), результатом является(+∞,π/2) - Если
zравно(x,NaN)(для любого конечного x), результатом является(NaN,NaN)и может возникнутьFE_INVALID - Если
zравно(-∞,y)(для любого конечного положительного y), результатом является(+∞,π) - Если
zравно(+∞,y)(для любого конечного положительного y), результатом является(+∞,+0) - Если
zравно(-∞,+∞), результатом является(+∞,3π/4) - Если
zравно(+∞,+∞), результатом является(+∞,π/4) - Если
zравно(±∞,NaN), результатом является(+∞,NaN) - Если
zравно(NaN,y)(для любого конечного y), результатом является(NaN,NaN)и может возникнутьFE_INVALID - Если
zравно(NaN,+∞), результатом является(+∞,NaN) - Если
zравно(NaN,NaN), результатом является(NaN,NaN)
Примечания
Натуральный логарифм комплексного числа z с компонентами полярных координат (r,θ) равен ln r + i(θ+2nπ), где главное значение — ln r + iθ.
Семантика этой функции призвана соответствовать семантике функции C clog.
Пример
#include <cmath>
#include <complex>
#include <iostream>
int main()
{
std::complex<double> z {0.0, 1.0}; // r = 1, θ = pi / 2
std::cout << "2 * log" << z << " = " << 2.0 * std::log(z) << '\n';
std::complex<double> z2 {sqrt(2.0) / 2, sqrt(2.0) / 2}; // r = 1, θ = pi / 4
std::cout << "4 * log" << z2 << " = " << 4.0 * std::log(z2) << '\n';
std::complex<double> z3 {-1.0, 0.0}; // r = 1, θ = pi
std::cout << "log" << z3 << " = " << std::log(z3) << '\n';
std::complex<double> z4 {-1.0, -0.0}; // the other side of the cut
std::cout << "log" << z4 << " (the other side of the cut) = " << std::log(z4) << '\n';
}
Возможный вывод:
2 * log(0,1) = (0,3.14159) 4 * log(0.707107,0.707107) = (0,3.14159) log(-1,0) = (0,3.14159) log(-1,-0) (the other side of the cut) = (0,-3.14159)
Отчёты об ошибках
Следующие отчёты об ошибках, меняющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| DR | Применяется к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 2597 | C++98 | спецификация некорректно обрабатывает знаковые нулевые мнимые части | ошибочное требование удалено |
См. также
| комплексный десятичный логарифм с разрезами ветви вдоль отрицательной вещественной оси (шаблон функции) |
|
| комплексная экспонента по основанию e (шаблон функции) |
|
|
(C++11)(C++11) | вычисляет натуральный логарифм (по основанию e) (\({\small\ln{x}}\)ln(x)) (функция) |
применяет функцию std::log к каждому элементу valarray (шаблон функции) |
|
Документация C для clog |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/complex/log