1. Ülevaade double-tüübist C keeles
Mis on double-tüüp
double
-tüüp on andmetüüp, mida kasutatakse C keeles ujukomaarvude käsitlemiseks. See kasutab 64 bitti (8 baiti) mälu ja võimaldab töötada väga täpsete ja laia ulatusega arvudega. Tänu nendele omadustele kasutatakse seda laialdaselt teaduslikes ja finantsarvutustes, kus täpsus on väga oluline.
Erinevus float-tüübiga
float
-tüüp kasutab 32 bitti (4 baiti) mälu ja suudab esitada umbes 7-kohalise täpsusega arve. Seevastu double
-tüüp pakub ligikaudu 15-kohalist täpsust ja sobib paremini olukordadesse, kus on vaja suuremat arvutustäpsust. Lisaks saab double
-tüübiga esitada laiemat arvude vahemikku võrreldes float
-tüübiga.
2. Double-tüübi põhitõed
Double-tüübi deklareerimine ja initsialiseerimine
Muutuja deklareerimine double
-tüübiga toimub järgmiselt:
double myNumber;
double myNumber = 3.14159;
Nagu näha, saab double
-muutujale omistada reaalarvu. Samuti on võimalik kasutada eksponentsiaalset märgendit väärtuse initsialiseerimiseks.
double largeNumber = 1.23e4; // 1.23 × 10^4
Double-tüübi mälumaht ja väärtuste vahemik
double
-tüüp kasutab 64 bitti (8 baiti) mälu ja võimaldab esitada arve vahemikus umbes ±1.7E±308. Seetõttu sobib see väga suurte arvude või suure täpsusega komaarvude esindamiseks.

3. Double-tüübi arvutused ja tüübimuundamine
Aritmeetrilised tehteid
double
-tüüp toetab põhilisi aritmeeteilisi tehteid, nagu liitmine, lahutamine, korrutamine ja jagamine.
double a = 5.5;
double b = 2.0;
double sum = a + b;
double difference = a - b;
double product = a * b;
double quotient = a / b;
Tüübi muutmine (castimine) ja konversioon
Kui teised andmetüübid tuleb teisendada double
-tüübiks, kasutatakse tüübi muutmist ehk castimist. Castimise abil saab täisarvud muuta ujukomaarvudeks, mis võimaldab täpsemat arvutamist.
int intVal = 10;
double doubleVal = (double)intVal;
Kui castimist ei kasutata, siis täisarvudega tehtavad arvutused eemaldavad komaosa. Seega on oluline olla ettevaatlik ja vajadusel castida õigesti.
4. Double-tüübi sisend ja väljund
Väljund printf-funktsiooniga
Kui soovid väljastada double
-tüüpi väärtusi kasutades printf
-funktsiooni, kasuta vormindaja %lf
. Eksponentsiaalset kujutist saab kuvada %le
abil ja parima automaatse vormingu puhul %lg
.
double pi = 3.14159;
printf("Ringjoone pii: %lf\n", pi);
printf("Eksponentsiaalne kujutis: %le\n", pi);
printf("Parim kujutis: %lg\n", pi);
Sisend scanf-funktsiooniga ja veakontroll
Kui kasutaja sisestab double
-tüüpi väärtuse, kasuta scanf
-funktsiooni koos vormindajaga %lf
. Samuti on oluline teostada veakontroll juhuks, kui sisestamisel tekib viga.
double radius;
printf("Sisesta ringi raadius: ");
if (scanf("%lf", &radius) != 1) {
printf("Sisestusviga tekkis\n");
return 1;
}
printf("Sisestatud raadius: %lf\n", radius);

5. Double-tüübi vahemik ja täpsus
Double-tüübi minimaalne ja maksimaalne väärtus
double
-tüübi minimaalset ja maksimaalset väärtust saab määrata <float.h>
päisefailis defineeritud konstantide DBL_MIN
ja DBL_MAX
abil.
printf("Double-tüübi minimaalne väärtus: %e\n", DBL_MIN);
printf("Double-tüübi maksimaalne väärtus: %e\n", DBL_MAX);
Täpsuse piirid ja ettevaatusabinõud
double
-tüüp võimaldab ligikaudu 15-kohalist täpsust, kuid ujukomaarvude arvutustes võib esineda ümardamisvigu. Eriti tuleb olla ettevaatlik väga väikeste või väga suurte arvude korduva arvutamise korral, kuna see võib põhjustada täpsuse kaotust.
6. Double-tüübi praktilised näited
Ringi pindala arvutamine
Siin on näide, kuidas arvutada ringi pindala kasutades double
-tüüpi.
double radius = 5.5;
double area = 3.14159 * radius * radius;
printf("Ringi pindala: %lf\n", area);
Arvude võrdlemine
Saad kasutada double
-tüüpi arvude võrdlemiseks, näiteks kontrollimaks, kumb arv on suurem.
double x = 3.14;
double y = 2.71;
if (x > y) {
printf("x on suurem kui y\n");
} else {
printf("x on väiksem kui y\n");
}
Kasutamine teaduslikes arvutustes
Teadusarvutustes kasutatakse double
-tüüpi sageli väga väikeste või väga suurte arvude käsitlemiseks. Näiteks kasutatakse seda füüsikaliste konstantide või statistiliste analüüside arvutamisel.
double result = log(10.0); // Looduslogaritmi arvutus
printf("log(10): %lf\n", result);

7. Levinumad vead ja tähelepanekud
Täisarvude jagamine ja double-tüüp
Kui omistad double
-tüübile täisarvude jagamise tulemuse, võid kaotada komaosa, kuna täisarvude jagamisel ümardatakse tulemus allapoole.
double d = 2 / 3; // Tulemus on 0.0000
Selle vältimiseks kasuta castimist, et tagada arvutus double
-tüübis.
double d = (double)2 / 3; // Tulemus on õigesti 0.6666...
Arvutusvigade käsitlemine
double
-tüübiga tehtud arvutustes võib tekkida vigu, näiteks nulliga jagamisel või kui tekib ületäitumine (overflow). Selliste olukordade vältimiseks on oluline lisada sobiv veakontroll.
double a = 10.0;
double b = 0.0;
if (b != 0.0) {
double result = a / b;
printf("Tulemus: %lf\n", result);
} else {
printf("Nulliga jagamine ei ole lubatud.\n");
}
Jõudluse kaalutlused
Kuigi double
-tüüp pakub suurt täpsust, võib see võrreldes float
-tüübiga aeglustada arvutusi. Kui väga suur täpsus ei ole vajalik, võib float
-tüübi kasutamine parandada programmi jõudlust.
8. Kokkuvõte
double
-tüüp on hädavajalik, kui töötad suure täpsusega ujukomaarvudega. Selles artiklis vaatasime üle double
-tüübi põhitõed, praktilised näited, vigade käsitlemise ja jõudluse aspektid. double
-tüübi omaduste mõistmine ja selle korrektne kasutamine võimaldab sul kirjutada täpsemaid ja usaldusväärsemaid programme.