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 float
i double
tipovi 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 f
ili F
na kraju float
vrijednosti. To je zato što prevoditelj decimalne vrijednosti bez sufiksa tumači kao double
.
Razmotrite ovaj kod.
float a = 5.6;
Ovdje smo varijabli dodijelili double
vrijednost 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 , 3e5f itd | Primjer: 3.56 , 3e5 itd |
Napomena: Ako nemate određeni zahtjev, uvijek koristite double
umjesto float
, jer float
varijable 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
cout
Pomoću setprecision()
funkcije možemo odrediti broj decimalnih mjesta za ispis .
Ova je funkcija definirana u iomanip
zaglavnoj 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 float
ima preciznost do samo 7 znamenki, prikazuje vrijednosti smeća nakon što je njegova preciznost premašena.
Naša double
varijabla 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 float
i 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 float
i 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 float
rezultata u primjeru 2 .
Rad s eksponencijalnim brojevima
Kao što je gore spomenuto, float
a double
mož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 scientific
formatu, bez obzira na veličinu broja, koristimo specifikator formata scientific
unutar 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 cout
bez setprecision()
, osim činjenice koja fixed
prikazuje brojeve do 6 decimalnih mjesta.
S druge strane, samo upotreba cout
prikazuje 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
, double
i long double
. Ne postoji long float
.