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