C:
Lavorare con i numeri complessi
Come fare:
In C, i numeri complessi sono supportati dalla Libreria Standard, specificamente <complex.h>
. Per utilizzarli, dichiara variabili con il tipo double complex
(o float complex
per la precisione singola). Ecco come eseguire operazioni di base:
#include <stdio.h>
#include <complex.h>
int main() {
double complex z1 = 1.0 + 2.0*I; // Dichiarazione di un numero complesso 1+2i
double complex z2 = 1.0 - 2.0*I; // Dichiarazione di un altro numero complesso 1-2i
// Addizione
double complex sum = z1 + z2;
printf("Somma: %.2f + %.2fi\n", creal(sum), cimag(sum)); // Output: Somma: 2.00 + 0.00i
// Moltiplicazione
double complex product = z1 * z2;
printf("Prodotto: %.2f + %.2fi\n", creal(product), cimag(product)); // Output: Prodotto: 5.00 + 0.00i
// Coniugato Complesso
double complex conjugate = conj(z1);
printf("Coniugato di z1: %.2f + %.2fi\n", creal(conjugate), cimag(conjugate)); // Output: Coniugato di z1: 1.00 - 2.00i
// Magnitudine
double magnitudine = cabs(z1);
printf("Magnitudine di z1: %.2f\n", magnitudine); // Output: Magnitudine di z1: 2.24
// Fase
double fase = carg(z1);
printf("Fase di z1: %.2f\n", fase); // Output in radianti
return 0;
}
Nota che I
è una costante che rappresenta l’unità immaginaria in <complex.h>
. Funzioni come creal()
e cimag()
estraggono rispettivamente le parti reale e immaginaria, mentre conj()
calcola il coniugato complesso. Per la magnitudine e la fase (argomento) dei numeri complessi, si usano cabs()
e carg()
.
Approfondimento
Il supporto per i numeri complessi in C è relativamente recente, essendo stato standardizzato nel C99. Prima di ciò, l’aritmetica dei numeri complessi in C era ingombrante, spesso richiedendo strutture dati e funzioni personalizzate. L’inclusione di <complex.h>
e i tipi di dati complessi hanno fornito un significativo impulso alle capacità del linguaggio per le applicazioni scientifiche e ingegneristiche. Tuttavia, vale la pena notare che alcuni linguaggi, come Python, offrono un supporto più intuitivo per i numeri complessi tramite tipi di dati integrati e un set più ricco di funzioni di libreria. Nonostante ciò, le prestazioni e il controllo offerti da C rendono una scelta preferenziale per compiti di calcolo ad alte prestazioni, anche se ciò significa avere a che fare con una sintassi leggermente più verbosa per l’aritmetica complessa.