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