# Complex.h

complex.h è un header della Libreria Standard del C introdotto con il C99 a supporto delle librerie matematiche, fornendo macro e funzioni per l'aritmetica dei numeri complessi.
L'header definisce le macro "complex" e "I", con queste direttive è possibile costruire un numero complesso sommando la parte immaginaria moltiplicata per I con quella reale.
Alternativamente alle macro di libreria, per definire un numero complesso si usa un tipo array di lunghezza due.

## Funzioni

Le funzioni <complex.h> sono divise in cinque sottocategorie, come nella libreria <math.h>, ma le sole funzioni unicamente per i numeri complessi sono le funzioni di manipolazione.
* Trigonometriche
* Iperboliche
* Esponenziali e logaritmiche
* Potenza e valore assoluto
* Manipolazione
Ogni funzione è disponibile in tre versioni, float complex, double complex e long double complex. Il nome della funzione verrà qui riportato come tipo double poiché corrisponde con il nome della funzione. Il nome delle versioni float finisce con la lettera f, mentre il nome delle versioni long double termina con la lettera l. Riportando un esempio:
| double | double complex cpow(double complex x, double complex y); |
| float | float complex cpowf(float complex x, float complex y); |
| long double | long double complex cpowl(long double complex x, long double complex y); |
Nelle funzioni complex.h, come per le funzioni math.h, gli angoli devono essere specificati in radianti e non in gradi.

### Funzioni trigonometriche

| double complex cacos(double complex z); | calcola l'arcocoseno del numero complesso z |
| double complex casin(double complex z); | calcola l'arcoseno del numero complesso z |
| double complex catan(double complex z); | calcola l'arcotangente del numero complesso z |
| double complex ccos(double complex z); | calcola il coseno del numero complesso z |
| double complex csin(double complex z); | calcola il seno del numero complesso z |
| double complex ctan(double complex z); | calcola la tangente del numero complesso z |

### Funzioni iperboliche

| double complex cacosh(double complex z); | calcola l'arcocoseno iperbolico del numero complesso z |
| double complex casinh(double complex z); | calcola l'arcoseno iperbolico del numero complesso z |
| double complex catanh(double complex z); | calcola l'arcotangente iperbolico del numero complesso z |
| double complex ccosh(double complex z); | calcola il coseno iperbolico del numero complesso z |
| double complex csinh(double complex z); | calcola il seno iperbolico del numero complesso z |
| double complex ctanh(double complex z); | calcola la tangente iperbolico del numero complesso z |

### Funzioni esponenziali e logaritmiche

| double complex cexp(double complex z); | calcola l'esponenziale in di base-e del numero complesso z |
| double complex clog(double complex z); | cacola il logaritmo naturale del numero complesso z |

### Funzioni di potenza e valore assoluto

| double cabs(double complex z); | calcola il valore assoluto del numero complesso z |
| double complex cpow(double complex x, double complex y); | calcola il numero complesso x elevato al numero complesso y |
| double complex csqrt(double complex z); | cacola la radice quadrata complessa del numero complesso z |

### Funzioni di manipolazione

Questa classe di funzioni permettono di gestire separatamente la parte immaginaria e reale del numero complesso.
| double carg(double complex z); | calcola la fase dell'angolo z (in radianti) |
| double cimag(double complex z); | calcola la parte immaginaria del numero complesso z |
| double complex conj(double complex z); | calcola il numero complesso coniugato del numero complesso z |
| double complex cproj(double complex z); | calcola la proiezione del numero complesso z sulla sfera di Reimann |
| double creal(double complex z); | calcola la parte reale del numero complesso z |