C ++ kelluu ja kaksinkertainen

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 floatja doubletietotyyppejä 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 ftai arvon Floppuun 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 doublearvon 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 , 3e5fjne. Esimerkki: 3.56 , 3e5jne.

Huomautus: Jos sinulla ei ole erityisiä vaatimuksia, käytä aina doublesijasta float, koska floatmuuttujia 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 coutkäyttämällä setprecision()toimintoa.

Tämä toiminto on määritelty iomanipotsikkotiedostossa, 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 floattarkkuus on kuitenkin vain 7 numeroa, se näyttää roska-arvot sen jälkeen, kun sen tarkkuus on ylitetty.

Meidän doublemuuttuja 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 floatja 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 floatja 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, floatja doublesitä 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 scientificnumeromuodossa riippumatta numeron koosta, käytämme muodon määrittelijää sen scientificsisä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 coutilman setprecision(), lukuun ottamatta sitä, että fixednumerot näytetään enintään 6 desimaalin tarkkuudella.

Toisaalta vain coutnä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, doubleja long double. Ei ole long float.

Mielenkiintoisia artikkeleita...