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
, , cabsl
cabsf
.
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