Condividi tramite


Supporto di operazioni matematiche complesse C

La libreria C Runtime di Microsoft (CRT) fornisce funzioni di libreria matematica complesse, incluse tutte quelle richieste da ISO C99. Il compilatore non supporta direttamente una complex parola chiave o _Complex , pertanto l'implementazione di Microsoft usa tipi di struttura per rappresentare numeri complessi.

L'implementazione di queste funzioni consente di bilanciare prestazioni e correttezza. Dato che generare un risultato con il corretto arrotondamento può avere costi proibitivi, queste funzioni sono progettate per ottenere in modo efficiente un'approssimazione molto vicina al risultato arrotondato correttamente. Nella maggior parte dei casi, il risultato prodotto si trova all'interno di +/-1 unità di precisione minima (ULP) del risultato arrotondato correttamente, anche se potrebbero esserci casi in cui è presente una maggiore imprecisione.

Le routine matematiche complesse si basano sulle funzioni della libreria delle operazioni matematiche a virgola mobile per la loro attuazione. Queste funzioni hanno implementazioni diverse per architetture della CPU differenti. La versione di CRT x86 a 32 bit, ad esempio, può avere un'implementazione diversa di CRT x64 a 64 bit. Alcune funzioni potrebbero inoltre avere più implementazioni per una particolare architettura della CPU. L'implementazione più efficiente viene selezionata in modo dinamico in fase di esecuzione a seconda del set di istruzioni supportate dalla CPU. Ad esempio, in CRT x86 a 32 bit alcune funzioni hanno sia un'implementazione x87 che un'implementazione SSE2. In caso di esecuzione su una CPU che supporta SSE2, viene usata l'implementazione SSE2 più veloce. Quando si esegue su una CPU che non supporta SSE2, viene usata l'implementazione x87 più lenta. Dato che implementazioni diverse delle funzioni della libreria delle operazioni matematiche possono usare istruzioni diverse della CPU e algoritmi differenti per produrre i risultati, le funzioni possono produrre risultati diversi con CPU differenti. Nella maggior parte dei casi, i risultati si trovano all'interno di +/-1 ULP del risultato arrotondato correttamente, ma i risultati effettivi possono variare in base alle CPU.

Tipi usati nelle operazioni matematiche complesse

L'implementazione Microsoft dell'intestazione complex.h definisce questi tipi come equivalenti per i tipi complessi nativi standard C99:

Tipo standard Tipo Microsoft
float complex oppure float _Complex _Fcomplex
double complex oppure double _Complex _Dcomplex
long double complex oppure long double _Complex _Lcomplex

L'intestazione math.h definisce un tipo separato, struct _complex, usato per la _cabs funzione . Il struct _complex tipo non viene usato dalle funzioni matematiche complesse equivalenti cabs, , cabslcabsf.

Costanti e macro complesse

I viene definito come tipo _Fcomplex complesso inizializzato da { 0.0f, 1.0f }.

Funzioni trigonometriche

Funzione Descrizione
cacos, cacosf, cacosl Calcola l'arcocoseno complesso di un numero complesso
casin, casinf, casinl Calcola l'arcoseno complesso di un numero complesso
catan, catanf, catanl Calcola l'arcotangente complessa di un numero complesso
ccos, ccosf, ccosl Calcola l'arcoseno complesso di un numero complesso
csin, csinf, csinl Calcola il seno complesso di un numero complesso
ctan, ctanf, ctanl Calcola la tangente complessa di un numero complesso

Funzioni iperboliche

Funzione Descrizione
cacosh, cacoshf, cacoshl Calcola l'arcocoseno iperbolico complesso di un numero complesso
casinh, casinhf, casinhl Calcola il seno iperbolico complesso di un numero complesso
catanh, catanhf, catanhl Calcola l'arcotangente iperbolica complessa di un numero complesso
ccosh, ccoshf, ccoshl Calcola il coseno iperbolico complesso di un numero complesso
csinh, csinhf, csinhl Calcola il seno iperbolico complesso di un numero complesso
ctanh, ctanhf, ctanhl Calcola la tangente iperbolica complessa di un numero complesso

Funzioni esponenziali e logaritmiche

Funzione Descrizione
cexp, cexpf, cexpl Calcola l'esponenziale in base e complesso di un numero complesso
clog, clogf, clogl Calcola il logaritmo naturale complesso (in base e) di un numero complesso
clog10, clog10f, clog10l Calcola il logaritmo naturale complesso in base 10 di un numero complesso

Funzioni di potenza e valore assoluto

Funzione Descrizione
cabs, cabsf, cabsl Calcola il valore assoluto complesso (denominato anche norma, modulo o grandezza) di un numero complesso
cpow, cpowf, cpowl Calcolare la funzione di potenza complessa
csqrt, csqrtf, csqrtl Calcola la radice quadrata complessa di un numero complesso

Funzioni di manipolazione

Funzione Descrizione
_Cbuild, _FCbuild, _LCbuild Costruisce un numero complesso da parti reali e immaginarie
carg, cargf, cargl Calcola l'argomento (detto anche angolo di fase) di un numero complesso
cimag, cimagf, cimagl Calcola la parte immaginaria di un numero complesso
conj, conjf, conjl Calcola il complesso coniugato di un numero complesso
cproj, cprojf, cprojl Calcola la proiezione di un numero complesso sulla sfera di Riemann
creal, crealf, creall Calcola la parte reale di un numero complesso
norm, normf, norml Calcola la grandezza al quadrato di un numero complesso

Funzioni di operatività

Poiché i numeri complessi non sono un tipo nativo nel compilatore Microsoft, gli operatori aritmetici standard non sono definiti su tipi complessi. Per praticità, queste funzioni della libreria di operazioni matematiche complesse vengono fornite per consentire la manipolazione limitata di numeri complessi nel codice utente:

Funzione Descrizione
_Cmulcc, _FCmulcc, _LCmulcc Moltiplicare due numeri complessi
_Cmulcr, _FCmulcr, _LCmulcr Moltiplica un numero complesso e un numero a virgola mobile

Vedi anche

Matematica generica di tipo
Routine di Universal C Runtime per categoria