C ++ float și dublu

În acest tutorial, vom afla despre tipurile de date flotante și duble cu ajutorul exemplelor. Vom analiza, de asemenea, câteva dintre diferențele cheie dintre ele și când să le folosim.

În C ++, ambele floatși doubletipurile de date sunt utilizate pentru valorile în virgulă mobilă. Numerele cu virgulă mobilă sunt utilizate pentru valorile zecimale și exponențiale . De exemplu,

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

Trebuie să adăugăm sufixul fsau Fla sfârșitul unei floatvalori. Acest lucru se datorează faptului că interpretii compilatorul zecimal valori fără sufixul ca double.

Luați în considerare acest cod.

 float a = 5.6;

Aici, am atribuit o doublevaloare unei floatvariabile.

În acest caz, 5.6 este convertit floatautomat de către compilator înainte de a fi atribuit variabilei a. Acest lucru poate duce la pierderea datelor. Pentru a afla mai multe, accesați Conversia de tip C ++.

Diferența dintre float și dublu

pluti dubla
Dimensiune: 4 octeți Dimensiune: 8 octeți
Precizie: În general, precizie cu 7 cifre zecimale Precizie: în general, precizie de 15 cifre zecimale
Exemplu: 3.56f , 3e5fetc. Exemplu: 3.56 , 3e5etc.

Notă: Dacă nu aveți o cerință specifică, utilizați întotdeauna doubleîn loc de float, deoarece floatvariabilele pot fi predispuse să introducă erori atunci când lucrați cu numere mari.

Exemplul 1: C ++ plutitor și dublu

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

Ieșire

 Număr dublu tip = 3,91235 Număr tip flotor = 3,91235

Notă: compilatorul utilizat pentru acest exemplu (compilator MinGW) a permis 6 cifre. Deci, valorile noastre variabile au fost rotunjite și trunchiate la 6 cifre de către compilator.

setprecision () pentru a specifica puncte zecimale

Putem specifica numărul de puncte zecimale de imprimat coututilizând setprecision()funcția.

Această funcție este definită în iomanipfișierul antet, care reprezintă manipularea intrării / ieșirii .

Exemplul 2: Utilizarea setprecision () pentru numerele cu virgulă mobilă

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

Ieșire

 Număr tip dublu = 3.912348239293 Număr tip tip plutitor = 3.912348270416

După cum putem vedea din exemplul de mai sus, am specificat precizia de până la 13 cifre.

 cout << setprecision(13);

Valoarea în virgulă mobilă pe care am atribuit-o variabilelor noastre constă, de asemenea, din 13 cifre.

Cu toate acestea, deoarece floatare o precizie de până la doar 7 cifre, arată valorile de gunoi după ce este depășită precizia sa.

doubleVariabila noastră arată numărul corect, deoarece are o precizie de 15 cifre, în timp ce numărul în sine este format din 13 cifre.

Ca alternativă, putem specifica diferite precizii pentru diferite variabile în timp ce le tipărim.

Exemplul 3: Precizări diferite pentru diferite variabile

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

Ieșire

 Număr tip dublu = 3.9123482393 Număr tip tip plutitor = 3.912348

Din programul de mai sus, putem vedea că am stabilit două valori diferite de precizie pentru floatși double.

În ambele cazuri, precizia este mai mică decât cifrele reale ale numărului. Deci, ultima cifră este rotunjită, iar restul este trunchiată.

Notă: Dacă specificăm precizia mai mare decât precizia tipului de date în sine (7 pentru floatși 15 pentru double), atunci compilatorul ne va da valori de gunoi după ce limita de precizie a fost depășită, așa cum se poate vedea cu floatieșirea din exemplul 2 .

Lucrați cu numere exponențiale

Așa cum s-a menționat mai sus floatși doublepoate fi folosit și pentru a reprezenta numere exponențiale . De exemplu,

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

C ++ generează numere exponențiale și numere foarte mari într-un format numit format științific . Variabila ex va fi difuzată în acest format în mod implicit, deoarece este un număr foarte mare.

Pentru a forța C ++ să afișeze numerele noastre în virgulă mobilă în scientificformat, indiferent de dimensiunea numărului, folosim specificatorul de format scientificdin cout.

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

În plus, există un alt specificator de format cunoscut sub numele de fixed, care afișează numere în virgulă mobilă în format zecimal.

Este similar cu afișarea numerelor cu virgulă mobilă utilizând numai coutfără setprecision(), cu excepția faptului că fixedafișează numere de până la 6 zecimale.

Pe de altă parte, folosind numai coutcifre afișate conform compilatorului specific (6 cifre totale în cazul compilatorului MinGW , inclusiv cifrele dinaintea punctului zecimal).

Exemplul 4: Formate fixe și științifice

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

Ieșire

 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;

Notă: Tipurile de date în virgulă mobilă acceptate de C ++ sunt float, doubleși long double. Nu există long float.

Articole interesante...