Share via


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 une complex ou _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 _complexutilisé pour la _cabs fonction. Le struct _complex type n’est pas utilisé par les fonctions cabsmathé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