Namespaces
Variants

Complex number arithmetic

From cppreference.net

Si la macro constante __STDC_NO_COMPLEX__ está definida por la implementación, los tipos complejos, el encabezado <complex.h> y todos los nombres listados aquí no están disponibles.

(desde C11)

El lenguaje de programación C, a partir de C99, soporta matemáticas de números complejos con los tres tipos incorporados double _Complex , float _Complex , y long double _Complex (ver _Complex ). Cuando se incluye el encabezado <complex.h> , los tres tipos de números complejos también son accesibles como double complex , float complex , long double complex .

Además de los tipos complejos, pueden admitirse los tres tipos imaginarios: double _Imaginary , float _Imaginary , y long double _Imaginary (consulte _Imaginary ). Cuando se incluye el encabezado <complex.h> , los tres tipos imaginarios también son accesibles como double imaginary , float imaginary , y long double imaginary .

Los operadores aritméticos estándar + , - , * , / pueden utilizarse con tipos reales, complejos e imaginarios en cualquier combinación.

Se recomienda, pero no se requiere, que un compilador que define __STDC_IEC_559_COMPLEX__ admita números imaginarios. POSIX recomienda verificar si la macro _Imaginary_I está definida para identificar el soporte de números imaginarios.

(desde C99)
(hasta C11)

Los números imaginarios son compatibles si __STDC_IEC_559_COMPLEX__ o __STDC_IEC_60559_COMPLEX__ (desde C23) está definido.

(desde C11)
Definido en el encabezado <complex.h>

Contenidos

Tipos
macro de tipo imaginario
(macro de palabra clave)
(C99)
macro de tipo complex
(macro de palabra clave)
La constante imaginaria
la constante de unidad imaginaria i
(macro constante)
la constante de unidad compleja i
(constante macro)
(C99)
la constante de unidad compleja o imaginaria i
(macro constante)
Manipulación
(C11) (C11) (C11)
construye un número complejo a partir de partes real e imaginaria
(macro de función)
(C99) (C99) (C99)
calcula la parte real de un número complejo
(función)
(C99) (C99) (C99)
calcula la parte imaginaria de un número complejo
(función)
(C99) (C99) (C99)
calcula la magnitud de un número complejo
(función)
(C99) (C99) (C99)
calcula el ángulo de fase de un número complejo
(función)
(C99) (C99) (C99)
calcula el conjugado complejo
(función)
(C99) (C99) (C99)
calcula la proyección en la esfera de Riemann
(función)
Funciones exponenciales
(C99) (C99) (C99)
calcula la exponencial compleja base e
(función)
(C99) (C99) (C99)
calcula el logaritmo natural complejo
(función)
Funciones de potencia
(C99) (C99) (C99)
calcula la función de potencia compleja
(función)
(C99) (C99) (C99)
calcula la raíz cuadrada compleja
(función)
Funciones trigonométricas
(C99) (C99) (C99)
calcula el seno complejo
(función)
(C99) (C99) (C99)
calcula el coseno complejo
(función)
(C99) (C99) (C99)
calcula la tangente compleja
(función)
(C99) (C99) (C99)
calcula el arco seno complejo
(función)
(C99) (C99) (C99)
calcula el arco coseno complejo
(función)
(C99) (C99) (C99)
calcula el arco tangente complejo
(función)
Funciones hiperbólicas
(C99) (C99) (C99)
calcula el seno hiperbólico complejo
(función)
(C99) (C99) (C99)
calcula el coseno hiperbólico complejo
(función)
(C99) (C99) (C99)
calcula la tangente hiperbólica compleja
(función)
(C99) (C99) (C99)
calcula el arco seno hiperbólico complejo
(función)
(C99) (C99) (C99)
calcula el arco coseno hiperbólico complejo
(función)
(C99) (C99) (C99)
calcula el arco tangente hiperbólica compleja
(función)

Notas

Los siguientes nombres de función están potencialmente (desde C23) reservados para futuras adiciones a <complex.h> y no están disponibles para su uso en programas que incluyan este encabezado: cerf , cerfc , cexp2 , cexpm1 , clog10 , clog1p , clog2 , clgamma , ctgamma , csinpi , ccospi , ctanpi , casinpi , cacospi , catanpi , ccompoundn , cpown , cpowr , crootn , crsqrt , cexp10m1 , cexp10 , cexp2m1 , clog10p1 , clog2p1 , clogp1 (desde C23) , junto con sus variantes con sufijos - f y - l .

Aunque el estándar de C nombra las funciones hiperbólicas inversas como "seno hiperbólico arco complejo" etc., las funciones inversas de las funciones hiperbólicas son las funciones de área. Su argumento es el área de un sector hiperbólico, no un arco. Los nombres correctos son "seno hiperbólico inverso complejo" etc. Algunos autores utilizan "seno hiperbólico de área complejo" etc.

Un número complejo o imaginario es infinito si una de sus partes es infinita, incluso si la otra parte es NaN.

Un número complejo o imaginario es finito si ambas partes no son infinitos ni NaNs.

Un número complejo o imaginario es cero si ambas partes son ceros positivos o negativos.

Si bien MSVC proporciona un <complex.h> header, no implementa números complejos como tipos nativos, sino como struct s, que son incompatibles con los tipos complejos estándar de C y no admiten los operadores + , - , * , / .

Ejemplo

#include <complex.h>
#include <stdio.h>
#include <tgmath.h>
int main(void)
{
    double complex z1 = I * I;     // unidad imaginaria al cuadrado
    printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1));
    double complex z2 = pow(I, 2); // unidad imaginaria al cuadrado
    printf("pow(I, 2) = %.1f%+.1fi\n", creal(z2), cimag(z2));
    double PI = acos(-1);
    double complex z3 = exp(I * PI); // fórmula de Euler
    printf("exp(I*PI) = %.1f%+.1fi\n", creal(z3), cimag(z3));
    double complex z4 = 1 + 2 * I, z5 = 1 - 2 * I; // conjugados
    printf("(1+2i)*(1-2i) = %.1f%+.1fi\n", creal(z4 * z5), cimag(z4 * z5));
}

Salida:

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

Referencias

Contenido extendido
  • Estándar C23 (ISO/IEC 9899:2024):
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (p: TBD)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (p: TBD)
  • 7.3 Aritmética compleja <complex.h> (p: TBD)
  • 7.25 Matemáticas genéricas de tipos <tgmath.h> (p: TBD)
  • 7.31.1 Aritmética compleja <complex.h> (p: TBD)
  • Anexo G (normativo) Aritmética compleja compatible con IEC 60559 (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (p: 128)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (p: 128)
  • 7.3 Aritmética compleja <complex.h> (p: 136-144)
  • 7.25 Matemáticas genéricas de tipos <tgmath.h> (p: 272-273)
  • 7.31.1 Aritmética compleja <complex.h> (p: 391)
  • Anexo G (normativo) Aritmética compleja compatible con IEC 60559 (p: 469-479)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (p: 177)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (p: 177)
  • 7.3 Aritmética compleja <complex.h> (p: 188-199)
  • 7.25 Matemáticas genéricas de tipos <tgmath.h> (p: 373-375)
  • 7.31.1 Aritmética compleja <complex.h> (p: 455)
  • Anexo G (normativo) Aritmética compleja compatible con IEC 60559 (p: 532-545)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 6.10.8/2 __STDC_IEC_559_COMPLEX__ (p: 161)
  • 7.3 Aritmética compleja <complex.h> (p: 170-180)
  • 7.22 Matemáticas genéricas de tipos <tgmath.h> (p: 335-337)
  • 7.26.1 Aritmética compleja <complex.h> (p: 401)
  • Anexo G (informativo) Aritmética compleja compatible con IEC 60559 (p: 467-480)

Véase también

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