C ++ plutajuće i dvostruko

U ovom uputstvu uz primjere ćemo naučiti o vrstama float i double podataka. Također ćemo pogledati neke od ključnih razlika između njih i kada ih koristiti.

U C ++-u se obje vrijednosti floati doubletipovi podataka koriste za vrijednosti s pomičnom zarezom. Brojevi s pomičnom zarezom koriste se za decimalne i eksponencijalne vrijednosti. Na primjer,

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

Moramo dodati sufiks fili Fna kraju floatvrijednosti. To je zato što prevoditelj decimalne vrijednosti bez sufiksa tumači kao double.

Razmotrite ovaj kod.

 float a = 5.6;

Ovdje smo varijabli dodijelili doublevrijednost float.

U ovom slučaju, prevodilac automatski pretvara u 5.6float prije nego što ga dodijeli varijabli a. To može rezultirati gubitkom podataka. Da biste saznali više, posjetite C ++ pretvorbu tipova.

Razlika između plutajućeg i dvostrukog

plutati dvostruko
Veličina: 4 bajta Veličina: 8 bajtova
Preciznost: Općenito, preciznost od 7 decimala Preciznost: Općenito, preciznost 15 decimalnih znamenki
Primjer: 3.56f , 3e5fitd Primjer: 3.56 , 3e5itd

Napomena: Ako nemate određeni zahtjev, uvijek koristite doubleumjesto float, jer floatvarijable mogu biti sklone uvođenju pogrešaka u radu s velikim brojevima.

Primjer 1: C ++ float i double

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

Izlaz

 Broj dvostrukog tipa = 3.91235 Broj plutajućeg tipa = 3.91235

Napomena: Prevodnik korišten za ovaj primjer (kompajler MinGW) dopušta 6 znamenki. Dakle, prevodilac je zaokružio i skratio na 6 znamenki.

setprecision () za određivanje decimalnih bodova

coutPomoću setprecision()funkcije možemo odrediti broj decimalnih mjesta za ispis .

Ova je funkcija definirana u iomanipzaglavnoj datoteci koja označava manipulaciju ulazom / izlazom .

Primjer 2: Korištenje setprecision () za brojeve s pomičnom zarezom

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

Izlaz

 Broj dvostrukog tipa = 3.912348239293 Broj tipa plovka = 3.912348270416

Kao što vidimo iz gornjeg primjera, odredili smo preciznost do 13 znamenki.

 cout << setprecision(13);

Vrijednost s pomičnom zarezom koju smo dodijelili našim varijablama također se sastoji od 13 znamenki.

Međutim, budući da floatima preciznost do samo 7 znamenki, prikazuje vrijednosti smeća nakon što je njegova preciznost premašena.

Naša doublevarijabla prikazuje točan broj jer ima preciznost od 15 znamenki, dok se sam broj sastoji od 13 znamenki.

Kao alternativu, možemo odrediti različite preciznosti za različite varijable dok ih ispisujemo.

Primjer 3: Različite preciznosti za različite varijable

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

Izlaz

 Broj dvostrukog tipa = 3.9123482393 Broj tipa plovka = 3.912348

Iz gornjeg programa vidimo da smo postavili dvije različite vrijednosti preciznosti za floati double.

U oba slučaja preciznost je manja od stvarnih znamenki broja. Tako se zadnja znamenka zaokružuje, a ostatak se skraćuje.

Napomena: Ako odredimo preciznost veću od preciznosti samog tipa podataka (7 za floati 15 za double), tada će nam prevodilac dati vrijednosti smeća nakon što se prekorači ograničenje preciznosti, kao što se može vidjeti iz floatrezultata u primjeru 2 .

Rad s eksponencijalnim brojevima

Kao što je gore spomenuto, floata doublemože se koristiti i za predstavljanje eksponencijalnih brojeva . Na primjer,

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

C ++ daje eksponencijalne brojeve i vrlo velike brojeve u formatu koji se naziva znanstveni format. Varijabla ex bit će zadana u ovom formatu, jer je to vrlo velik broj.

Kako bismo prisilili C ++ da prikazuje brojeve s pomičnom zarezom u scientificformatu, bez obzira na veličinu broja, koristimo specifikator formata scientificunutar cout.

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

Uz to, postoji još jedan specifikator formata poznat kao fixed, koji prikazuje brojeve s pomičnom zarezom u decimalnom formatu.

Slično je prikazivanju brojeva s pomičnom zarezom samo upotrebom coutbez setprecision(), osim činjenice koja fixedprikazuje brojeve do 6 decimalnih mjesta.

S druge strane, samo upotreba coutprikazuje znamenke prema određenom prevoditelju (ukupno 6 znamenki u slučaju MinGW prevoditelja , uključujući znamenke ispred decimalne točke).

Primjer 4: Fiksni i znanstveni formati

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

Izlaz

 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;

Napomena: Vrste pomičnim zarezom podataka podržava C ++ su float, doublei long double. Ne postoji long float.

Zanimljivi članci...