C:
Työskenteleminen kompleksilukujen kanssa
Kuinka:
C:ssä kompleksilukuja tuetaan Vakio Kirjaston kautta, erityisesti <complex.h>
:n kautta. Niiden käyttämiseen julista muuttujat double complex
tyypillä (tai float complex
yksittäisen tarkkuuden tapauksessa). Tässä on, miten suorittaa perustoiminnot:
#include <stdio.h>
#include <complex.h>
int main() {
double complex z1 = 1.0 + 2.0*I; // Julista kompleksiluku 1+2i
double complex z2 = 1.0 - 2.0*I; // Julista toinen kompleksiluku 1-2i
// Lisäys
double complex summa = z1 + z2;
printf("Summa: %.2f + %.2fi\n", creal(summa), cimag(summa)); // Tuloste: Summa: 2.00 + 0.00i
// Kertolasku
double complex tulo = z1 * z2;
printf("Tulo: %.2f + %.2fi\n", creal(tulo), cimag(tulo)); // Tuloste: Tulo: 5.00 + 0.00i
// Kompleksikonjugaatti
double complex konjugaatti = conj(z1);
printf("Z1:n konjugaatti: %.2f + %.2fi\n", creal(konjugaatti), cimag(konjugaatti)); // Tuloste: Z1:n konjugaatti: 1.00 - 2.00i
// Suuruus
double suuruus = cabs(z1);
printf("Z1:n suuruus: %.2f\n", suuruus); // Tuloste: Z1:n suuruus: 2.24
// Vaihe
double vaihe = carg(z1);
printf("Z1:n vaihe: %.2f\n", vaihe); // Tuloste radiaaneina
return 0;
}
Huomaa, että I
on vakio, joka edustaa imaginääriyksikköä <complex.h>
:ssa. Funktiot kuten creal()
ja cimag()
poimivat vastaavasti reaali- ja imaginääriosat, kun taas conj()
laskee kompleksikonjugaatin. Kompleksilukujen suuruuden ja vaiheen (argumentin) osalta käytetään cabs()
- ja carg()
-funktioita.
Syväluotaus
Tuki kompleksiluvuille C:ssä on suhteellisen uusi, ja se standardisoitiin C99:ssä. Ennen tätä kompleksilukuaritmetiikka C:ssä oli hankalaa, usein vaatien mukautettuja tietorakenteita ja funktioita. <complex.h>
:n ja kompleksidatatyyppien sisällyttäminen tarjosi merkittävän parannuksen kielen kykyihin tieteellisiin ja insinöörisovelluksiin. On kuitenkin huomionarvoista, että jotkut kielet, kuten Python, tarjoavat intuitiivisempaa tukea kompleksiluvuille sisäänrakennettujen datatyyppien ja rikkaamman kirjastofunktioiden joukon kautta. Siitä huolimatta C:n tarjoama suorituskyky ja hallinta tekevät siitä etusijalla olevan valinnan suorituskykyä vaativissa laskentatehtävissä, vaikka se tarkoittaakin hieman monisanaisempaa syntaksia kompleksiaritmetiikalle.