C ++ lebeg és dupla

Ebben az oktatóanyagban példák segítségével megismerhetjük a lebegő és a kettős adattípusokat. Megvizsgáljuk a köztük levő legfontosabb különbségeket és azt is, hogy mikor alkalmazzuk őket.

A C ++, mind floatés doubleadattípust használnak lebegőpontos értékek. A tizedes és az exponenciális értékek lebegőpontos számokat használnak . Például,

 // 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

Hozzá kell adnunk az utótagot fvagy Fegy floatérték végét . A fordító ugyanis a tizedes értékeket utótag nélkül értelmezi double.

Fontolja meg ezt a kódot.

 float a = 5.6;

Itt doubleértéket rendeltünk egy floatváltozóhoz.

Ebben az esetben az 5.6- ot floata fordító automatikusan átkonvertálja, mielőtt hozzárendelik az a változóhoz. Ez adatvesztést okozhat. További információért keresse fel a C ++ típusú konverziót.

Különbség az úszó és a kettős között

úszó kettős
Méret: 4 bájt Méret: 8 bájt
Pontosság: Általában 7 tizedesjegyű pontosság Pontosság: Általában 15 tizedesjegyű pontosság
Példa: 3.56f , 3e5fstb Példa: 3.56 , 3e5stb

Megjegyzés: Hacsak nincs konkrét követelménye, mindig használja a doublehelyett float, mert a floatváltozók hajlamosak hibákat bevezetni, ha nagy számmal dolgoznak.

1. példa: C ++ úszó és dupla

 #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; )

Kimenet

 Dupla típusszám = 3,91235 Úszó típusú szám = 3,91235

Megjegyzés: A példához használt fordító (MinGW fordító) 6 számjegyet engedélyezett. Tehát, a változó értékeinket lekerekítette és 6 számjegyűre csonkolta a fordító.

setprecision () a tizedespontok megadásához

Adhatjuk meg a tizedes pontot nyomtatni coutsegítségével a setprecision()funkciót.

Ezt a függvényt a iomanipfejlécfájl határozza meg , amely a bemeneti / kimeneti manipulációt jelenti .

2. példa: A setprecision () használata lebegőpontos számokhoz

 #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; )

Kimenet

 Dupla típusszám = 3,912348239293 Úszó típusszám = 3,912348270416

Amint a fenti példából láthatjuk, a pontosságot legfeljebb 13 számjegyből adtuk meg.

 cout << setprecision(13);

A változóinkhoz rendelt lebegőpontos érték szintén 13 számjegyből áll.

Azonban, mivel floategy pontosságát akár csak 7 számjegy, ez azt mutatja, szemét értékek után a pontosság meghaladja.

Változónk doublea helyes számot mutatja, mivel annak 15 jegyű pontossága van, míg maga a szám 13 számjegyből áll.

Alternatív megoldásként megadhatunk különböző pontosságokat a különböző változókhoz nyomtatás közben.

3. példa: Különböző pontosságok a különböző változókhoz

 #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; )

Kimenet

 Dupla típusszám = 3,9123482393 Úszó típusszám = 3,912348

A fenti programból láthatjuk, hogy két különböző pontossági értéket állítottunk be a floatés számára double.

Mindkét esetben a pontosság kisebb, mint a szám tényleges számjegyei. Tehát az utolsó számjegyet kerekítik, a többit pedig csonkítják.

Megjegyzés: Ha megadjuk a pontosságot, amely nagyobb, mint maga az adattípus (7 for floatés 15 for double) pontossága, akkor a fordító szemetet ad nekünk a pontossági határ túllépése után, amint az a 2. példafloat kimenetén is látható .

Dolgozzon exponenciális számokkal

Mint fent említettük, floatés exponenciális számokdouble ábrázolására is használható . Például,

 // ex = 325 X (10 25) double ex = 325E25;

A C ++ exponenciális számokat és nagyon nagy számokat ad ki tudományos formátumnak nevezett formátumban. Az ex változó alapértelmezés szerint ebben a formátumban jelenik meg, mivel ez nagyon nagy szám.

Annak érdekében, hogy erőt C ++ megjelenítéséhez a lebegőpontos számok a scientificformátumban, függetlenül a méret a szám, akkor használja a formátumleíró scientificbelsejében cout.

 double num = 3.25; // ex = 325 X (10 25) double ex = 325E25; // using scientific format cout << scientific << num; cout << scientific << ex;

Ezen felül létezik egy másik formátummeghatározó fixed, amely a lebegőpontos számokat tizedes formátumban jeleníti meg.

Hasonló a lebegőpontos számok megjelenítéséhez, ha csak a coutnélkül használjuk setprecision(), kivéve azt a tényt, amely fixedlegfeljebb 6 tizedesjegyig számokat jelenít meg.

Másrészt csak a coutkijelölt számjegyek használata az adott fordító szerint (6 teljes számjegy a MinGW fordító esetében , beleértve a tizedesjegy előtti számjegyeket is).

4. példa: Rögzített és tudományos formátumok

 #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; )

Kimenet

 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;

Megjegyzés: A C ++ által támogatott lebegőpontos adattípusok a következők float, doubleés long double. Nincs long float.

érdekes cikkek...