Espacios de nombres
Variantes
Acciones

std::complex

De cppreference.com
< cpp‎ | numeric
 
 
 
std::complex
Funciones miembro
Funciones no miembro
Funciones exponenciales
Funciones de potencias
Funciones trigonométricas
(C++11)
(C++11)
(C++11)
Funciones hiperbólicas
(C++11)
(C++11)
(C++11)
 
Definido en el archivo de encabezado <complex>
template< class T >
class complex;
(1)
template<> class complex<float>;
(2)
template<> class complex<double>;
(3)
template<> class complex<long double>;
(4)

Las especializaciones std::complex<float>, std::complex<double>, y std::complex<long double> son LiteralType para representar y manipular números complejos.

Contenido

[editar] Parámetros de plantilla

T - El tipo de los componentes real e imaginario. El comportamiento no está especificado (y puede fallar al compilar) si T no es float, double o long double y no definido si T no es NumericType.

[editar] Tipos miembro

Tipo miembro Definición
value_type T

[editar] Funciones miembro

Construye un número complejo.
(función miembro pública) [editar]
Asigna el contenido.
(función miembro pública) [editar]
Accede a la parte real del número complejo.
(función miembro pública) [editar]
Accede a la parte imaginaria del número complejo.
(función miembro pública) [editar]
Asignación compuesta de dos números complejos o un complejo y un escalar.
(función miembro pública) [editar]

[editar] Funciones no miembro

Aplica operadores unarios a números complejos.
(plantilla de función) [editar]
Realiza la aritmética de números complejos en dos valores complejos o un complejo y un escalar.
(plantilla de función) [editar]
Compara dos números complejos o un complejo y un escalar.
(plantilla de función) [editar]
Serializa y deserializa un número complejo.
(plantilla de función) [editar]
Devuelve el componente real.
(plantilla de función) [editar]
Devuelve el componente imaginario.
(plantilla de función) [editar]
Devuelve la magnitud de un número complejo.
(plantilla de función) [editar]
Devuelve el ángulo de fase.
(plantilla de función) [editar]
Devuelve la magnitud al cuadrado.
(plantilla de función) [editar]
Devuelve el complejo conjugado.
(plantilla de función) [editar]
(C++11)
Devuelve la proyección sobre la esfera de Riemann.
(plantilla de función) [editar]
Construye un número complejo a partir de una magnitud y un ángulo de fase.
(plantilla de función) [editar]
Funciones exponenciales
Base e exponencial compleja.
(plantilla de función) [editar]
Logaritmo natural complejo con los cortes de ramificaciones a lo largo del eje real negativo.
(plantilla de función) [editar]
Logaritmo común complejo con los cortes de ramificaciones a lo largo del eje real negativo.
(plantilla de función) [editar]
Funciones de potencias
Potencia compleja; uno o ambos argumentos pueden ser un número complejo.
(plantilla de función) [editar]
Raíz cuadrada en el rango del plano medio derecho.
(plantilla de función) [editar]
Funciones trigonométricas
Calcula el seno de un número complejo (sen(z)).
(plantilla de función) [editar]
Calcula el coseno de un número complejo (cos(z)).
(plantilla de función) [editar]
Calcula la tangente de un número complejo (tan(z)).
(plantilla de función) [editar]
Calcula el arco seno de un número complejo (arcsin(z)).
(plantilla de función) [editar]
Calcula el arco coseno de un número complejo (arccos(z)).
(plantilla de función) [editar]
Calcula la arco tangente de un número complejo (arctan(z)).
(plantilla de función) [editar]
Funciones hiperbólicas
Calcula el seno hiperbólico de un número complejo (sinh(z)).
(plantilla de función) [editar]
Calcula el coseno hiperbólico de un número complejo (cosh(z)).
(plantilla de función) [editar]
Calcula tangente hiperbólica de un número complejo (tanh(z)).
(plantilla de función) [editar]
Calcula el área del seno hiperbólico de un número complejo (arsinh(z)).
(plantilla de función) [editar]
Calcula el área del coseno hiperbólico de un número complejo (arcosh(z)).
(plantilla de función) [editar]
Calcula el área de la tangente hiperbólica de un número complejo (artanh(z)).
(plantilla de función) [editar]

[editar] Acceso orientado a arrays

Para cualquier objeto z de tipo complex<T>, reinterpret_cast<T(&)[2]>(z)[0] es la parte real de z y reinterpret_cast<T(&)[2]>(z)[1] es la parte imaginaria de z.

Para cualquier puntero a un elemento de un array de complex<T> denominado p y cualquier índice de array válido i, reinterpret_cast<T*>(p)[2*i] es la parte real del número complejo p[i], y reinterpret_cast<T*>(p)[2*i + 1] es la parte imaginaria del número complejo p[i]

La intención de este requerimiento es preservar la compatibilidad binaria entre los tipos de números complejos de la biblioteca de C++ y los tipos de números complejos del lenguaje C (y arrays de los mismos), que tienen un requerimiento de representación de objetos idéntico.

(desde C++11)

[editar] Notas de implementación

Para satisfacer los requerimientos del acceso orientado a arrays, una implementación está restringida para almacenar los componentes reales e imaginarios de una especialización std::complex en ubicaciones de memoria separadas y adyacentes. Las posibles declaraciones para sus datos miembro no estáticos incluyen:

  • un array de tipo value_type[2], con el primer elemento que contiene el componente real y el segundo elemento que contiene el componente imaginario (por ejemplo, Microsoft Visual Studio);
  • un solo miembro de tipo value_type _Complex (que encapsula los tipos de números complejos del lenguaje C correspondientes) (por ejemplo, GNU libstdc++);
  • dos miembros de tipo value_type, con el mismo acceso de miembro, que contienen los componentes real e imaginario respectivamente (por ejemplo, LLVM libc++).

Una implementación no puede declarar datos miembro no estáticos adicionales que ocuparían almacenamiento separado de los componentes reales e imaginarios, y debe asegurarse de que la especialización de la plantilla de clase no contenga ningún relleno. La implementación también debe garantizar que las optimizaciones para el acceso al array tengan en cuenta la posibilidad de que un puntero a value_type pueda estar creando un alias de una especialización std::complex o un array del mismo.

(desde C++11)

[editar] Literales

Definido en el espacio de nombres std::literals::complex_literals
Un literal std::complex que representa un número imaginario puro.
(función) [editar]

[editar] Ejemplo

#include <iostream>
#include <iomanip>
#include <complex>
#include <cmath>
 
int main()
{
    using namespace std::complex_literals;
    std::cout << std::fixed << std::setprecision(1);
 
    std::complex<double> z1 = 1i * 1i;     // unidad imaginaria al cuadrado
    std::cout << "i * i = " << z1 << '\n';
 
    std::complex<double> z2 = std::pow(1i, 2); // unidad imaginaria al cuadrado
    std::cout << "pow(i, 2) = " << z2 << '\n';
 
    const double PI = std::acos(-1); // o std::numbers::pi en C++20
    std::complex<double> z3 = std::exp(1i * PI); // fórmula de Euler
    std::cout << "exp(i * pi) = " << z3 << '\n';
 
    std::complex<double> z4 = 1. + 2i, z5 = 1. - 2i; // conjugados
    std::cout << "(1+2i)*(1-2i) = " << z4*z5 << '\n';
}

Salida:

i * i = (-1.0,0.0)
pow(i, 2) = (-1.0,0.0)
exp(i * pi) = (-1.0,0.0)
(1+2i)*(1-2i) = (5.0,0.0)

[editar] Véase también

Documentación de C para Aritmética de números complejos