Compartir por


Compatibilidad con cálculos matemáticos complejos de C

La biblioteca de Microsoft C Runtime (CRT) proporciona funciones complejas de biblioteca matemática, incluidas todas las necesarias para ISO C99. El compilador no admite directamente las palabras clave complex ni _Complex, de modo que la implementación de Microsoft usa tipos de estructuras para representar los números complejos.

Estas funciones se implementan para equilibrar el rendimiento con exactitud. Dado que es posible que producir el resultado redondeado correctamente sea excesivamente costoso, estas funciones están diseñadas para generar con eficacia una buena aproximación al resultado redondeado correctamente. En la mayoría de los casos, el resultado generado está dentro de +/-1 unidad de menor precisión (ULP) del resultado redondeado correctamente, aunque puede haber casos en los que haya una mayor imprecisión.

Las rutinas de cálculos matemáticos complejos dependen de las funciones de la biblioteca de punto flotante para su implementación. Dichas funciones presentan implementaciones distintas según la arquitectura de CPU. Por ejemplo, puede que el CRT x86 de 32 bits tenga una implementación distinta que el CRT x64 de 64 bits. Además, algunas de las funciones pueden tener varias implementaciones para una determinada arquitectura de CPU. La implementación más eficaz se selecciona dinámicamente en tiempo de ejecución en función de los conjuntos de instrucciones compatibles con la CPU. Por ejemplo, en el CRT x86 de 32 bits, algunas funciones tienen una implementación x87 y una implementación SSE2. Cuando se ejecuta en una CPU que admite SSE2, se usa la implementación SSE2 más rápida. Cuando se ejecuta en una CPU que no admite SSE2, se usa la implementación x87 más lenta. Dado que es posible que diferentes implementaciones de las funciones de la biblioteca matemática usen distintas instrucciones de CPU y distintos algoritmos para generar sus resultados, puede que las funciones generen diferentes resultados en las CPU. En la mayoría de los casos, los resultados están dentro de +/-1 ULP del resultado redondeado correctamente, pero los resultados reales pueden variar en las CPU.

Tipos que se utilizan en cálculos matemáticos complejos

La implementación de Microsoft del encabezado complex.h define dichos tipos como equivalentes de los tipos complejos nativos del estándar C99:

Tipo estándar Tipo de Microsoft
float complex o float _Complex _Fcomplex
double complex o double _Complex _Dcomplex
long double complex o long double _Complex _Lcomplex

El encabezado math.h define un tipo independiente, struct _complex, que se usa para la función _cabs. Las funciones de cálculos matemáticos complejos equivalentes cabs, cabsf, cabsl no usan el tipo struct _complex.

Constantes y macros complejas

I se define como el tipo complejo _Fcomplex inicializado por { 0.0f, 1.0f }.

Funciones trigonométricas

Función Descripción
cacos, , cacosf, cacosl Permite calcular el arcocoseno complejo de un número complejo.
casin, , casinf, casinl Permite calcular el arcoseno complejo de un número complejo.
catan, , catanf, catanl Permite calcular la arcotangente compleja de un número complejo.
ccos, , ccosf, ccosl Permite calcular el coseno complejo de un número complejo.
csin, , csinf, csinl Permite calcular el seno complejo de un número complejo.
ctan, , ctanf, ctanl Permite calcular la tangente compleja de un número complejo.

Funciones hiperbólicas

Función Descripción
cacosh, , cacoshf, cacoshl Permite calcular el arcocoseno hiperbólico complejo de un número complejo.
casinh, , casinhf, casinhl Permite calcular el arcoseno hiperbólico complejo de un número complejo.
catanh, , catanhf, catanhl Permite calcular la arcotangente hiperbólica compleja de un número complejo.
ccosh, , ccoshf, ccoshl Permite calcular el coseno hiperbólico complejo de un número complejo.
csinh, , csinhf, csinhl Permite calcular el seno hiperbólico complejo de un número complejo.
ctanh, , ctanhf, ctanhl Permite calcular la tangente hiperbólica compleja de un número complejo.

Funciones exponenciales y logarítmicas

Función Descripción
cexp, , cexpf, cexpl Permite calcular el valor exponencial complejo de base e de un número complejo.
clog, , clogf, clogl Permite calcular el logaritmo natural complejo de base e de un número complejo.
clog10, , clog10f, clog10l Permite calcular el logaritmo complejo de base 10 de un número complejo.

Funciones de potencias y valores absolutos

Función Descripción
cabs, , cabsf, cabsl Permite calcular el valor complejo absoluto (también denominado "norma vectorial", "módulo" o "magnitud") de un número complejo.
cpow, , cpowf, cpowl Proceso de la función de energía compleja
csqrt, , csqrtf, csqrtl Permite calcular la raíz cuadrada compleja de un número complejo.

Funciones de manipulación

Función Descripción
_Cbuild, , _FCbuild, _LCbuild Permite construir un número complejo a partir de elementos reales e imaginarios.
carg, , cargf, cargl Permite calcular el argumento (también denominado "ángulo de fase") de un número complejo.
cimag, , cimagf, cimagl Permite calcular el elemento imaginario de un número complejo.
conj, , conjf, conjl Permite calcular el conjugado complejo de un número complejo.
cproj, , cprojf, cprojl Permite calcular la proyección de un número complejo en la esfera de Riemann.
creal, , crealf, creall Permite calcular el elemento real de un número complejo.
norm, , normf, norml Permite calcular la magnitud cuadrada de un número complejo.

Funciones de operación

Dado que los números complejos no son un tipo nativo del compilador de Microsoft, los operadores aritméticos estándar no se definen en los tipos complejos. Para mayor comodidad, estas funciones de la biblioteca de cálculos matemáticos complejos se proporcionan para permitir una manipulación limitada de los números complejos del código de usuario:

Función Descripción
_Cmulcc, , _FCmulcc, _LCmulcc Permite multiplicar dos números complejos.
_Cmulcr, , _FCmulcr, _LCmulcr Permite multiplicar un número complejo y un número de punto flotante.

Consulte también

Matemáticas de tipo genérico
Rutinas en tiempo de ejecución Universal C por categoría