C ++ flyde og dobbelt

I denne vejledning lærer vi om float- og dobbeltdatatyperne ved hjælp af eksempler. Vi vil også se på nogle af de vigtigste forskelle mellem dem og hvornår de skal bruges.

I C ++ bruges både floatog doubledatatyper til værdier med flydende punkt. Flydende tal bruges til decimal- og eksponentielle værdier. For eksempel,

 // 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 skal tilføje suffikset feller Fi slutningen af ​​en floatværdi. Dette skyldes, at kompilatoren fortolker decimalværdier uden suffikset som double.

Overvej denne kode.

 float a = 5.6;

Her har vi tildelt en doubleværdi til en floatvariabel.

I dette tilfælde konverteres 5.6float automatisk til af compileren, før den tildeles variablen a. Dette kan resultere i tab af data. For at lære mere, besøg C ++ Type konvertering.

Forskellen mellem flyde og dobbelt

flyde dobbelt
Størrelse: 4 bytes Størrelse: 8 byte
Præcision: Generelt præcision med 7 decimaler Præcision: Generelt 15 cifre præcision
Eksempel: 3.56f , 3e5fetc. Eksempel: 3.56 , 3e5etc.

Bemærk: Medmindre du har et specifikt krav, skal du altid bruge i doublestedet for float, da floatvariabler kan være tilbøjelige til at introducere fejl, når du arbejder med store tal.

Eksempel 1: C ++ flyde og fordoble

 #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

 Dobbelt type nummer = 3.91235 Flydetype nummer = 3.91235

Bemærk: Compileren, der er brugt til dette eksempel (MinGW compiler) tilladt for 6 cifre. Så vores variable værdier blev afrundet og afkortet til 6 cifre af compileren.

setprecision () for at specificere decimalpoint

Vi kan specificere antallet af decimaler, der skal udskrives i, coutved hjælp af setprecision()funktionen.

Denne funktion er defineret i iomanipheaderfilen, som står for input / output manipulation .

Eksempel 2: Brug af setprecision () til flydepunktsnumre

 #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

 Dobbelt type nummer = 3.912348239293 Flydetype nummer = 3.912348270416

Som vi kan se fra eksemplet ovenfor, har vi specificeret præcisionen op til 13 cifre.

 cout << setprecision(13);

Den flydende punktværdi, vi har tildelt vores variabler, består også af 13 cifre.

Da den dog floathar en præcision på op til kun 7 cifre, viser den skraldværdier, når dens præcision er overskredet.

Vores doublevariabel viser det korrekte tal, fordi det har en præcision på 15 cifre, mens selve tallet består af 13 cifre.

Som et alternativ kan vi specificere forskellige præcisioner for forskellige variabler, mens vi udskriver dem.

Eksempel 3: Forskellige præcisioner til forskellige 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

 Dobbelt type nummer = 3.9123482393 Flydetype nummer = 3.912348

Fra ovenstående program kan vi se, at vi har indstillet to forskellige præcisionsværdier for floatog double.

I begge tilfælde er præcisionen mindre end de faktiske cifre i nummeret. Så det sidste ciffer afrundes, og resten afkortes.

Bemærk: Hvis vi specificerer præcisionen, der er større end selve datatypens præcision (7 for floatog 15 for double), giver compileren os skraldværdier, efter at præcisionsgrænsen er overskredet, som det kan ses med floatoutput i eksempel 2 .

Arbejd med eksponentielle numre

Som nævnt ovenfor floatog doublekan også bruges til at repræsentere eksponentielle tal . For eksempel,

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

C ++ udsender eksponentielle tal og meget store tal i et format kaldet det videnskabelige format. Variablen ex udsendes som standard i dette format, da det er et meget stort tal.

For at tvinge C ++ til at vise vores flydende numre i scientificformatet uanset størrelsen på nummeret bruger vi formatspecifikatoren scientificinde i cout.

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

Derudover er der et andet format specificeret kendt som fixed, der viser flydende numre i decimalformat.

Det svarer til at vise flydende numre ved kun at bruge coutuden setprecision(), bortset fra det faktum, at der fixedvises tal op til 6 decimaler.

På den anden side viser kun brug af coutcifre i henhold til den specifikke compiler (6 samlede cifre i tilfælde af MinGW-compiler , inklusive cifrene før decimaltegnet).

Eksempel 4: Faste og videnskabelige formater

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

Bemærk: De floating-point datatyper understøttes af C ++ er float, doubleog long double. Der er ingen long float.

Interessante artikler...