C ++ plavajoči in dvojni

V tej vadnici bomo s pomočjo primerov spoznali vrste float in double. Ogledali si bomo tudi nekatere ključne razlike med njimi in kdaj jih uporabiti.

V C ++ se oba floatin doublepodatkovna tipa uporabljata za vrednosti s plavajočo vejico. Števila s plavajočo vejico se uporabljajo za decimalne in eksponentne vrednosti. Na primer

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

Dodati moramo pripono fali Fna koncu floatvrednosti. To pa zato, ker prevajalnik decimalne vrednosti brez končnice razlaga kot double.

Upoštevajte to kodo.

 float a = 5.6;

Tu smo spremenljivki dodelili doublevrednost float.

V tem primeru prevajalnik samodejno pretvori v 5.6,float preden ga dodeli spremenljivki a. To lahko povzroči izgubo podatkov. Če želite izvedeti več, obiščite pretvorbo tipa C ++.

Razlika med plovcem in dvojnikom

float dvojno
Velikost: 4 bajti Velikost: 8 bajtov
Natančnost: Na splošno je natančnost 7 decimalnih mest Natančnost: Na splošno natančnost 15 decimalnih mest
Primer: 3.56f , 3e5fitd Primer: 3.56 , 3e5itd

Opomba: Razen če imate določeno zahtevo, vedno uporabite doublenamesto float, saj floatlahko spremenljivke pri delu z večjimi številkami povzročajo napake.

Primer 1: C ++ float in 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; )

Izhod

 Številka dvojnega tipa = 3.91235 Številka tipa float = 3.91235

Opomba: Prevajalnik, uporabljen za ta primer (prevajalnik MinGW), ima dovoljeno šestmestno številko. Torej je naše vrednosti spremenljivk prevajalnik zaokrožil in skrajšal na 6 številk.

setprecision () za določanje decimalnih točk

Mi lahko določite število decimalnih mest za tiskanje v couts pomočjo setprecision()funkcije.

Ta funkcija je definirana v iomanipnaslovni datoteki, ki pomeni manipulacijo z vhodom / izhodom .

Primer 2: Uporaba nastavitve natančnosti () za številke s plavajočo vejico

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

Izhod

 Številka dvojnega tipa = 3.912348239293 Številka tipa float = 3.912348270416

Kot lahko vidimo iz zgornjega primera, smo določili natančnost do 13 števk.

 cout << setprecision(13);

Vrednost s plavajočo vejico, ki smo jo dodelili spremenljivkam, je prav tako sestavljena iz 13 števk.

Ker pa floatima natančnost do samo 7 števk, prikazuje vrednosti smeti po preseženi natančnosti.

Naša doublespremenljivka prikazuje pravilno število, saj ima natančnost 15 števk, medtem ko je sama številka sestavljena iz 13 števk.

Kot alternativo lahko med tiskanjem določimo različne natančnosti za različne spremenljivke.

Primer 3: Različne natančnosti za različne spremenljivke

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

Izhod

 Številka dvojnega tipa = 3.9123482393 Številka tipa float = 3.912348

Iz zgornjega programa lahko vidimo, da smo za floatin določili dve različni vrednosti natančnosti double.

V obeh primerih je natančnost manjša od dejanskih številk števila. Tako se zadnja številka zaokroži, ostalo pa se skrajša.

Opomba: Če določimo natančnost, večjo od natančnosti samega podatkovnega tipa (7 for floatin 15 for double), nam bo prevajalnik po preseganju meje natančnosti dal vrednosti smeti, kot je razvidno iz floatrezultata v primeru 2 .

Delo z eksponentnimi številkami

Kot je navedeno zgoraj, floatin doublese lahko uporablja tudi za zastopanje eksponentne številk . Na primer

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

C ++ daje eksponentna in zelo velika števila v obliki, imenovani znanstvena oblika. Spremenljivka ex bo privzeto prikazana v tej obliki, ker gre za zelo veliko število.

Da bi prisilili C ++, da prikaže številke s plavajočo vejico v scientificobliki, ne glede na velikost številke, uporabimo specifikator oblike scientificznotraj cout.

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

Poleg tega obstaja še en specifikator oblike, znan kot " fixedprikazujejo številke s plavajočo vejico v decimalni obliki.

To je podobno prikazovanje plavajočo vejico s samo uporabo cout, ne da bi setprecision(), razen dejstva, da se fixedprikaže številke do 6 pikami.

Po drugi strani pa samo uporaba coutštevk prikazuje določen prevajalnik (skupno 6 števk v primeru prevajalnika MinGW , vključno s števkami pred decimalno vejico).

Primer 4: Fiksni in 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; )

Izhod

 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;

Opomba: tipi podatkov med plavajočo vejico s C ++ so podprte float, doublein long double. Ne obstaja long float.

Zanimive Članki...