C:
Praca z liczbami zespolonymi
Jak to zrobić:
W języku C liczby zespolone są obsługiwane przez bibliotekę standardową, a konkretnie przez <complex.h>
. Aby z nich korzystać, należy deklarować zmienne typu double complex
(lub float complex
dla pojedynczej precyzji). Oto jak wykonać podstawowe operacje:
#include <stdio.h>
#include <complex.h>
int main() {
double complex z1 = 1.0 + 2.0*I; // Deklaracja liczby zespolonej 1+2i
double complex z2 = 1.0 - 2.0*I; // Deklaracja innej liczby zespolonej 1-2i
// Dodawanie
double complex suma = z1 + z2;
printf("Suma: %.2f + %.2fi\n", creal(suma), cimag(suma)); // Wynik: Suma: 2.00 + 0.00i
// Mnożenie
double complex iloczyn = z1 * z2;
printf("Iloczyn: %.2f + %.2fi\n", creal(iloczyn), cimag(iloczyn)); // Wynik: Iloczyn: 5.00 + 0.00i
// Sprzężenie zespolone
double complex sprzezenie = conj(z1);
printf("Sprzężenie z1: %.2f + %.2fi\n", creal(sprzezenie), cimag(sprzezenie)); // Wynik: Sprzężenie z1: 1.00 - 2.00i
// Moduł
double modul = cabs(z1);
printf("Moduł z1: %.2f\n", modul); // Wynik: Moduł z1: 2.24
// Argument (faza)
double faza = carg(z1);
printf("Faza z1: %.2f\n", faza); // Wynik podany w radianach
return 0;
}
Zwróć uwagę, że I
jest stałą reprezentującą jednostkę urojoną w <complex.h>
. Funkcje takie jak creal()
i cimag()
pozwalają na ekstrakcję części rzeczywistej i urojonej odpowiednio, podczas gdy conj()
oblicza sprzężenie zespolone. Do obliczania modułu i argumentu (fazy) liczb zespolonych używane są cabs()
i carg()
.
Wnikliwe spojrzenie
Obsługa liczb zespolonych w C jest stosunkowo nowa, została znormalizowana w C99. Przed tym, arytmetyka liczb zespolonych w C była uciążliwa, często wymagająca niestandardowych struktur danych i funkcji. Włączenie <complex.h>
i typów danych zespolonych znacząco zwiększyło możliwości języka dla zastosowań naukowych i inżynierskich. Warto jednak zauważyć, że niektóre języki, takie jak Python, oferują bardziej intuicyjne wsparcie dla liczb zespolonych poprzez wbudowane typy danych i bogatszy zestaw funkcji bibliotecznych. Pomimo to, wydajność i kontrola oferowana przez C czynią go preferowanym wyborem dla zadań obliczeń wysokiej wydajności, nawet jeśli oznacza to radzenie sobie z nieco bardziej rozbudowaną składnią dla arytmetyki zespolonej.