Namespaces
Variants

std:: log (std::complex)

From es.cppreference.net
Definido en el encabezado <complex>
template < class T >
std:: complex < T > log ( const std:: complex < T > & z ) ;

Calcula el logaritmo natural (base e ) complejo de un valor complejo z con un corte de rama a lo largo del eje real negativo.

Contenidos

Parámetros

z - valor complejo

Valor de retorno

Si no ocurren errores, se devuelve el logaritmo natural complejo de z , en el rango de una franja en el intervalo [−iπ, +iπ] a lo largo del eje imaginario y matemáticamente ilimitado a lo largo del eje real.

Manejo de errores y valores especiales

Los errores se reportan de manera consistente con math_errhandling .

Si la implementación admite aritmética de punto flotante IEEE,

  • La función es continua sobre el corte de rama teniendo en cuenta el signo de la parte imaginaria
  • std:: log ( std:: conj ( z ) ) == std:: conj ( std:: log ( z ) )
  • Si z es (-0,+0) , el resultado es (-∞,π) y se genera FE_DIVBYZERO
  • Si z es (+0,+0) , el resultado es (-∞,+0) y se genera FE_DIVBYZERO
  • Si z es (x,+∞) (para cualquier x finito), el resultado es (+∞,π/2)
  • Si z es (x,NaN) (para cualquier x finito), el resultado es (NaN,NaN) y puede generarse FE_INVALID
  • Si z es (-∞,y) (para cualquier y positivo finito), el resultado es (+∞,π)
  • Si z es (+∞,y) (para cualquier y positivo finito), el resultado es (+∞,+0)
  • Si z es (-∞,+∞) , el resultado es (+∞,3π/4)
  • Si z es (+∞,+∞) , el resultado es (+∞,π/4)
  • Si z es (±∞,NaN) , el resultado es (+∞,NaN)
  • Si z es (NaN,y) (para cualquier y finito), el resultado es (NaN,NaN) y puede generarse FE_INVALID
  • Si z es (NaN,+∞) , el resultado es (+∞,NaN)
  • Si z es (NaN,NaN) , el resultado es (NaN,NaN)

Notas

El logaritmo natural de un número complejo z con componentes de coordenadas polares (r,θ) es igual a ln r + i(θ+2nπ) , con el valor principal ln r + iθ .

La semántica de esta función está diseñada para ser consistente con la función C clog .

Ejemplo

#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';
}

Salida posible:

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)

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2597 C++98 la especificación maneja incorrectamente las partes imaginarias con signo cero requisito erróneo eliminado

Véase también

logaritmo común complejo con los cortes de rama a lo largo del eje real negativo
(plantilla de función)
exponencial compleja de base e
(plantilla de función)
(C++11) (C++11)
calcula el logaritmo natural (base e ) ( ln(x) )
(función)
aplica la función std::log a cada elemento del valarray
(plantilla de función)