C ++ flyta och dubbla

I denna handledning lär vi oss om flyt- och dubbeldatatyperna med hjälp av exempel. Vi kommer också att titta på några av de viktigaste skillnaderna mellan dem och när de ska användas.

I C ++ används både floatoch doubledatatyper för flytpunktsvärden. Flytpunktsnummer används för decimal- och exponentiella värden. Till exempel,

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

Vi måste lägga till suffixet feller Fi slutet av ett floatvärde. Detta beror på att kompilatorn tolkar decimalvärden utan suffixet som double.

Tänk på den här koden.

 float a = 5.6;

Här har vi tilldelat ett doublevärde till en floatvariabel.

I det här fallet konverteras 5.6float automatiskt till av kompilatorn innan den tilldelas variabeln a. Detta kan leda till dataförlust. För att lära dig mer, besök C ++ typkonvertering.

Skillnad mellan float och double

flyta dubbel
Storlek: 4 byte Storlek: 8 byte
Precision: Generellt, 7 decimalers precision Precision: I allmänhet 15 decimalers precision
Exempel: 3.56f , 3e5fetc. Exempel: 3.56 , 3e5etc.

Obs: Om du inte har ett specifikt krav, använd alltid doubleistället för float, eftersom floatvariabler kan vara benägna att införa fel när du arbetar med stora siffror.

Exempel 1: C ++ float och 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; )

Produktion

 Dubbel typnummer = 3.91235 Flyttypnummer = 3.91235

Obs! Kompilatorn som används i detta exempel (MinGW-kompilator) tillåts för 6 siffror. Så, våra variabla värden avrundades och avkortades till 6 siffror av kompilatorn.

setprecision () för att ange decimaler

Vi kan ange antalet decimaler som ska skrivas ut coutgenom att använda setprecision()funktionen.

Den här funktionen definieras i iomaniprubrikfilen, som står för manipulering av in- och utdata .

Exempel 2: Använd setprecision () för flytpunktsnummer

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

Produktion

 Dubbel typnummer = 3.912348239293 Flyttypnummer = 3.912348270416

Som vi kan se från exemplet ovan har vi specificerat precisionen upp till 13 siffror.

 cout << setprecision(13);

Det flytande punktvärdet som vi har tilldelat våra variabler består också av 13 siffror.

Eftersom den floathar en precision på upp till endast 7 siffror, visar den dock skräpvärden efter att dess precision har överskridits.

Vår doublevariabel visar rätt antal eftersom den har en precision på 15 siffror, medan själva numret består av 13 siffror.

Som ett alternativ kan vi ange olika precisioner för olika variabler när vi skriver ut dem.

Exempel 3: Olika precisioner för olika variabler

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

Produktion

 Dubbel typnummer = 3.9123482393 Flyttypnummer = 3.912348

Från programmet ovan kan vi se att vi har ställt in två olika precisionsvärden för floatoch double.

I båda fallen är precisionen mindre än siffrorna i numret. Så den sista siffran avrundas och resten trunkeras.

Obs: Om vi ​​anger precisionen som är större än precisionen för själva datatypen (7 för floatoch 15 för double), kommer kompilatorn att ge oss skräpvärden efter att precisionsgränsen har överskridits, vilket kan ses med floatutdata i exempel 2 .

Arbeta med exponentiella nummer

Som nämnts ovan, floatoch doublekan också användas för att representera exponentiella nummer . Till exempel,

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

C ++ matar ut exponentiella nummer och mycket stora nummer i ett format som kallas det vetenskapliga formatet. Variabeln ex kommer att matas ut i detta format som standard eftersom det är ett mycket stort antal.

För att tvinga C ++ att visa våra flytpunktsnummer i scientificformatet oavsett storleken på numret använder vi formatspecifikationen scientificinuti cout.

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

Utöver detta finns det en annan formatspecifikator som kallas fixed, som visar flytpunktsnummer i decimalformat.

Det liknar att visa flytpunktsnummer genom att bara använda coututan setprecision(), förutom det faktum att fixeduppvisar siffror upp till 6 decimaler.

Å andra sidan coutvisar endast siffror enligt den specifika kompilatorn (6 totala siffror för MinGW-kompilatorn , inklusive siffrorna före decimal).

Exempel 4: Fasta och vetenskapliga format

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

Produktion

 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;

Notera: De flytande datatyper som stöds av C ++ är float, doubleoch long double. Det finns ingen long float.

Intressanta artiklar...