Prise en charge des fonctions mathématiques complexes C
La bibliothèque Microsoft C Runtime (CRT) fournit des fonctions de bibliothèque mathématique complexes, y compris celles requises par ISO C99. Le compilateur ne prend pas directement en charge un mot clé ou _Complex
un complex
mot clé. Par conséquent, l’implémentation de Microsoft utilise des types de structure pour représenter des nombres complexes.
Ces fonctions sont implémentées pour équilibrer le niveau de performance avec exactitude. Étant donné que la production du résultat correctement arrondi peut atteindre un coût prohibitif, ces fonctions sont conçues pour produire efficacement une approximation précise du résultat correctement arrondi. Dans la plupart des cas, le résultat produit se trouve dans l’unité +/-1 de la précision minimale (ULP) du résultat arrondi correctement, bien qu’il y ait des cas où il y a une plus grande inexactitude.
Les routines mathématiques complexes s’appuient sur les fonctions mathématiques à virgule flottante de la bibliothèque pour leur implémentation. Ces fonctions ont des implémentations différentes pour des architectures de processeur différentes. Par exemple, l’implémentation de la bibliothèque CRT x86 32 bits peut être différente de celle de la bibliothèque CRT x64 64 bits. De plus, certaines fonctions peuvent avoir plusieurs implémentations pour une architecture de processeur donnée. L’implémentation la plus efficace est sélectionnée de façon dynamique au moment de l’exécution selon les jeux d’instructions pris en charge par le processeur. Par exemple, dans la bibliothèque CRT x86 32 bits, certaines fonctions ont à la fois une implémentation x87 et une implémentation SSE2. Lors d’une exécution sur un processeur qui prend en charge SSE2, l’implémentation SSE2 plus rapide est utilisée. Lors de l’exécution sur un processeur qui ne prend pas en charge SSE2, l’implémentation x87 plus lente est utilisée. Étant donné que les différentes implémentations des fonctions de bibliothèque mathématique peuvent utiliser des instructions de processeur différentes et des algorithmes différents pour produire leurs résultats, les fonctions peuvent produire des résultats différents selon les processeurs. Dans la plupart des cas, les résultats se trouvent dans l’ULP +/-1 du résultat correctement arrondi, mais les résultats réels peuvent varier entre les PROCESSEURs.
Types utilisés dans les calculs complexes
L’implémentation Microsoft de l’en-tête complex.h
définit ces types comme équivalents pour les types complexes natifs standard C99 :
Type standard | Type Microsoft |
---|---|
float complex ou float _Complex |
_Fcomplex |
double complex ou double _Complex |
_Dcomplex |
long double complex ou long double _Complex |
_Lcomplex |
L’en-tête math.h
définit un type distinct, struct _complex
utilisé pour la _cabs
fonction. Le struct _complex
type n’est pas utilisé par les fonctions cabs
mathématiques complexes équivalentes , cabsf
. cabsl
Constantes et macros complexes
I
est défini comme le type _Fcomplex
complexe initialisé par { 0.0f, 1.0f }
.
Fonctions trigonométriques
Fonction | Description |
---|---|
cacos , , cacosf cacosl |
Calcul de l’arc cosinus complexe d’un nombre complexe |
casin , , casinf casinl |
Calcul de l’arc sinus complexe d’un nombre complexe |
catan , , catanf catanl |
Calcul de l’arc tangente complexe d’un nombre complexe |
ccos , , ccosf ccosl |
Calcul du cosinus complexe d’un nombre complexe |
csin , , csinf csinl |
Calcul du sinus complexe d’un nombre complexe |
ctan , , ctanf ctanl |
Calcul de la tangente complexe d’un nombre complexe |
Fonctions hyperboliques
Fonction | Description |
---|---|
cacosh , , cacoshf cacoshl |
Calcul de l’arc cosinus hyperbolique complexe d’un nombre complexe |
casinh , , casinhf casinhl |
Calcul de l’arc sinus hyperbolique complexe d’un nombre complexe |
catanh , , catanhf catanhl |
Calcul de l’arc tangente hyperbolique complexe d’un nombre complexe |
ccosh , , ccoshf ccoshl |
Calcul du cosinus hyperbolique complexe d’un nombre complexe |
csinh , , csinhf csinhl |
Calcul du sinus hyperbolique complexe d’un nombre complexe |
ctanh , , ctanhf ctanhl |
Calcul de la tangente hyperbolique complexe d’un nombre complexe |
Fonctions exponentielles et logarithmiques
Fonction | Description |
---|---|
cexp , , cexpf cexpl |
Calcul de la valeur exponentielle de base e complexe d’un nombre complexe |
clog , , clogf clogl |
Calcul du logarithme népérien (base-e) complexe d’un nombre complexe |
clog10 , , clog10f clog10l |
Calcul du logarithme en base-10 complexe d’un nombre complexe |
Fonctions valeur absolue et puissance
Fonction | Description |
---|---|
cabs , , cabsf cabsl |
Calcul de la valeur absolue complexe (également appelée norme, module ou magnitude) d’un nombre complexe |
cpow , , cpowf cpowl |
Calcul de la fonction de puissance complexe |
csqrt , , csqrtf csqrtl |
Calcul de la racine carrée complexe d’un nombre complexe |
Fonctions de manipulation
Fonction | Description |
---|---|
_Cbuild , , _FCbuild _LCbuild |
Construction d’un nombre complexe à partir de parties réelles et imaginaires |
carg , , cargf cargl |
Calcul de l’argument (également appelé angle de phase) d’un nombre complexe |
cimag , , cimagf cimagl |
Calcul de la partie imaginaire d’un nombre complexe |
conj , , conjf conjl |
Calcul du conjugué complexe d'un nombre complexe |
cproj , , cprojf cprojl |
Calcul d’une projection d’un nombre complexe sur la sphère de Reimann |
creal , , crealf creall |
Calcul de la partie réelle d’un nombre complexe |
norm , , normf norml |
Calcul de la magnitude au carré d’un nombre complexe |
Fonctions d’opération
Étant donné que les nombres complexes ne sont pas un type natif dans le compilateur Microsoft, les opérateurs arithmétiques standard ne sont pas définis sur les types complexes. Pour des raisons pratiques, ces fonctions mathématiques complexes de la bibliothèque sont fournies pour limiter la manipulation de nombres complexes dans le code utilisateur :
Fonction | Description |
---|---|
_Cmulcc , , _FCmulcc _LCmulcc |
Multiplication de deux nombres complexes |
_Cmulcr , , _FCmulcr _LCmulcr |
Multiplication d’un nombre complexe et d’un nombre à virgule flottante |
Voir aussi
Mathématiques de type générique
Routines du runtime C universel par catégorie