Tässä opetusohjelmassa opitaan float- ja double-tietotyypeistä esimerkkien avulla. Tarkastelemme myös joitain tärkeimpiä eroja niiden välillä ja milloin niitä käytetään.
C ++: ssa molempia float
ja double
tietotyyppejä käytetään liukulukuarvoihin. Liukulukuja käytetään desimaali- ja eksponentiaaliarvoihin . Esimerkiksi,
// creating float type variables float num1 = 3.0f; float num2 = 3.5f; float num3 = 3E-5f; // 3x10^-5 // creating double type variables double num4 = 3.0; double num5 = 3.5; double num6 = 3E-5; // 3x10^-5
Meidän on lisättävä loppuliite f
tai arvon F
loppuun float
. Tämä johtuu siitä, että kääntäjä tulkitsee desimaaliarvot ilman loppuliitettä muodossa double
.
Harkitse tätä koodia.
float a = 5.6;
Tässä olemme antaneet muuttujalle double
arvon float
.
Tässä tapauksessa kääntäjä muuntaa 5.6float
automaattisesti automaattisesti, ennen kuin se määritetään muuttujalle a. Tämä voi johtaa tietojen menetykseen. Saat lisätietoja käymällä C ++ -tyyppimuunnoksessa.
Ero kelluvan ja kaksinkertaisen välillä
kellua | kaksinkertainen |
---|---|
Koko: 4 tavua | Koko: 8 tavua |
Tarkkuus: Yleensä 7 desimaalin tarkkuudella | Tarkkuus: Yleensä 15 desimaalin tarkkuudella |
Esimerkki: 3.56f , 3e5f jne. | Esimerkki: 3.56 , 3e5 jne. |
Huomautus: Jos sinulla ei ole erityisiä vaatimuksia, käytä aina double
sijasta float
, koska float
muuttujia saattavat olla alttiimpia aiheuttaa virheitä työskenneltäessä suuri määrä.
Esimerkki 1: C ++ kelluva ja kaksinkertainen
#include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0; )
Tuotos
Kaksinkertainen tyyppinumero = 3,91235 Kelluva tyyppinumero = 3,91235
Huomaa: Tässä esimerkissä käytetty kääntäjä (MinGW-kääntäjä) salli 6 numeroa. Joten kääntäjä pyöristää muuttuja-arvomme ja katkaisi sen 6 numeroon.
setprecision () Määritä desimaalipisteet
Voimme määritellä, kuinka monta desimaalipisteet tulostaa cout
käyttämällä setprecision()
toimintoa.
Tämä toiminto on määritelty iomanip
otsikkotiedostossa, joka tarkoittaa syötteen / lähdön manipulointia .
Esimerkki 2: Setprecision () -toiminnon käyttäminen liukulukuihin
#include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting the precision to 12 decimal places cout << setprecision(13); // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0; )
Tuotos
Kaksinkertainen tyyppinumero = 3.912348239293 Kelluva tyyppinumero = 3.912348270416
Kuten voimme nähdä yllä olevasta esimerkistä, olemme määrittäneet tarkkuuden enintään 13 numeroon.
cout << setprecision(13);
Muuttujillemme määrittelemämme liukulukuarvo koostuu myös 13 numerosta.
Koska float
tarkkuus on kuitenkin vain 7 numeroa, se näyttää roska-arvot sen jälkeen, kun sen tarkkuus on ylitetty.
Meidän double
muuttuja näkyy oikea määrä, koska se on tarkkuus 15 numeroa, kun taas määrä itsessään koostuu 13 numeroa.
Vaihtoehtoisesti voimme määrittää eri tarkkuudet eri muuttujille tulostettaessa niitä.
Esimerkki 3: Eri tarkkuudet eri muuttujille
#include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting precision to 11 for double cout << "Double Type Number = " << setprecision(11) << a << endl; // Setting precision to 7 for float cout << "Float Type Number = " << setprecision(7) << b << endl; return 0; )
Tuotos
Kaksinkertainen tyyppinumero = 3.9123482393 Kelluva tyyppinumero = 3.912348
Yllä olevasta ohjelmasta voimme nähdä, että olemme asettaneet kaksi erilaista tarkkuusarvoa float
ja double
.
Molemmissa tapauksissa tarkkuus on pienempi kuin numeron todelliset numerot. Joten viimeinen numero pyöristetään ja loput katkaistaan.
Huomaa: Jos määritämme tarkkuuden, joka on suurempi kuin itse tietotyypin tarkkuus (7 for float
ja 15 for double
), kääntäjä antaa meille roskiarvot sen jälkeen, kun tarkkuusraja on ylitetty, kuten esimerkin 2float
tulos voidaan nähdä .
Työskentele eksponentiaalisten numeroiden kanssa
Kuten edellä mainittiin, float
ja double
sitä voidaan käyttää myös eksponentiaalisten numeroiden esittämiseen . Esimerkiksi,
// ex = 325 X (10 25) double ex = 325E25;
C ++ tuottaa eksponentiaalilukuja ja erittäin suuria lukuja tieteelliseksi muodoksi kutsutussa muodossa. Muuttuja ex annetaan oletusarvoisesti tässä muodossa, koska se on hyvin suuri luku.
Pakottaaksemme C ++: n näyttämään liukuluvut scientific
numeromuodossa riippumatta numeron koosta, käytämme muodon määrittelijää sen scientific
sisällä cout
.
double num = 3.25; // ex = 325 X (10 25) double ex = 325E25; // using scientific format cout << scientific << num; cout << scientific << ex;
Tämän lisäksi on olemassa toinen muotomääritin fixed
, joka tunnetaan nimellä , joka näyttää liukuluvut desimaalimuodossa.
Se on samanlainen kuin liukulukujen näyttäminen käyttämällä vain cout
ilman setprecision()
, lukuun ottamatta sitä, että fixed
numerot näytetään enintään 6 desimaalin tarkkuudella.
Toisaalta vain cout
näyttölukujen käyttäminen tietyn kääntäjän mukaan (6 numeroa MinGW-kääntäjän tapauksessa , mukaan lukien desimaalipilkun edelliset numerot).
Esimerkki 4: Kiinteät ja tieteelliset muodot
#include #include using namespace std; int main() ( // Creating a decimal double type variable double a = 3.912348239293; // Creating an exponential double type variable double ex1 = 325e+2; // Creating a float type variable float b = 3.912348239293f; // Creating an exponential float type variable float ex2 = 325e+2f; // Displaying output with fixed cout << "Displaying Output With fixed:" << endl; cout << "Double Type Number 1 = " << fixed << a << endl; cout << "Double Type Number 2 = " << fixed << ex1 << endl; cout << "Float Type Number 1 = " << fixed << b << endl; cout << "Float Type Number 2 = " << fixed << ex2 << endl; // Displaying output with scientific cout << "Displaying Output With scientific:" << endl; cout << "Double Type Number 1 = " << scientific << a << endl; cout << "Double Type Number 2 = " << scientific << ex1 << endl; cout << "Float Type Number 1 = " << scientific << b << endl; cout << "Float Type Number 2 = " << scientific << ex2 << endl; return 0; )
Tuotos
Displaying Output With fixed: Double Type Number 1 = 3.912348 Double Type Number 2 = 32500.000000 Float Type Number 1 = 3.912348 Float Type Number 2 = 32500.000000 Displaying Output With scientific: Double Type Number 1 = 3.912348e+000 Double Type Number 2 = 3.250000e+004 Float Type Number 1 = 3.912348e+000 Float Type Number 2 = 3.250000e+004
long double
Apart from float
and double
, there is another data type that can store floating-point numbers. This is known as long double
.
It usually occupies a space of 12 bytes (depends on the computer system in use), and its precision is at least the same as double
, though most of the time, it is greater than that of double
.
long double
values should end with L
. For example,
// declaring a long double variable long double num_ldb = 2.569L;
Huomautus: Liukulukumuotoiset datan tukemia C ++ ovat float
, double
ja long double
. Ei ole long float
.