C ++ flyte og doble

I denne opplæringen vil vi lære om flyt- og dobbeltdatatypene ved hjelp av eksempler. Vi vil også se på noen av hovedforskjellene mellom dem og når de skal brukes.

I C ++ brukes både floatog doubledatatyper til flytende punktverdier. Flytende tall brukes til desimal- og eksponensielle verdier. 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 må legge til suffikset feller Fpå slutten av en floatverdi. Dette er fordi kompilatoren tolker desimalverdier uten suffikset som double.

Vurder denne koden.

 float a = 5.6;

Her har vi tilordnet en doubleverdi til en floatvariabel.

I dette tilfellet konverteres 5.6float automatisk til kompilatoren før den tildeles variabelen a. Dette kan føre til tap av data. For å lære mer, besøk C ++ Type konvertering.

Forskjellen mellom flyte og dobbelt

flyte dobbelt
Størrelse: 4 byte Størrelse: 8 byte
Presisjon: Generelt, 7 desimaler presisjon Presisjon: Generelt, 15 desimaler presisjon
Eksempel: 3.56f , 3e5fetc. Eksempel: 3.56 , 3e5etc.

Merk: Med mindre du har et spesifikt krav, bruk alltid i doublestedet for float, da floatvariabler kan være tilbøyelige til å innføre feil når du arbeider med store tall.

Eksempel 1: C ++ flyte og doble

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

Produksjon

 Dobbelt type nummer = 3.91235 Flyt type nummer = 3.91235

Merk: Kompilatoren som er brukt for dette eksemplet (MinGW kompilator) tillatt for seks sifre. Så, våre variable verdier ble avrundet og avkortet til 6 sifre av kompilatoren.

setprecision () for å spesifisere desimalpoeng

Vi kan spesifisere antall desimaler som skal skrives ut coutved å bruke setprecision()funksjonen.

Denne funksjonen er definert i iomanipheaderfilen, som står for manipulering av inngang / utgang .

Eksempel 2: Bruke setprecision () for flytende punktnumre

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

Produksjon

 Dobbelt type nummer = 3.912348239293 flottørtype nummer = 3.912348270416

Som vi kan se fra eksemplet ovenfor, har vi spesifisert presisjonen opp til 13 sifre.

 cout << setprecision(13);

Flytpunktverdien vi har tildelt variablene våre, består også av 13 sifre.

Siden den imidlertid floathar en presisjon på opptil 7 sifre, viser den søppelverdier etter at presisjonen er overskredet.

Våre doublevariable viser riktig nummer fordi den har en presisjon på 15 siffer, mens selve nummeret består av 13 siffer.

Som et alternativ kan vi spesifisere forskjellige presisjoner for forskjellige variabler mens vi skriver dem ut.

Eksempel 3: Ulike presisjoner for forskjellige 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; )

Produksjon

 Dobbelt type nummer = 3.9123482393 Flytertype nummer = 3.912348

Fra programmet ovenfor kan vi se at vi har satt to forskjellige presisjonsverdier for floatog double.

I begge tilfeller er presisjonen mindre enn de faktiske sifrene i tallet. Så det siste sifferet blir avrundet, og resten blir avkortet.

Merk: Hvis vi spesifiserer presisjonen som er større enn presisjonen til selve datatypen (7 for floatog 15 for double), vil kompilatoren gi oss søppelverdier etter at presisjonsgrensen er overskredet, som det fremgår av floatutdataene i eksempel 2 .

Arbeid med eksponentielle tall

Som nevnt ovenfor, floatog doublekan også brukes til å representere eksponentielle tall . For eksempel,

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

C ++ gir eksponentielle tall og veldig store tall i et format som kalles det vitenskapelige formatet. Variabelen ex vil bli utgitt i dette formatet som standard, siden det er et veldig stort tall.

For å tvinge C ++ til å vise våre flytende tall i scientificformatet uavhengig av størrelsen på tallet, bruker vi formatspesifikasjonen scientificinne i cout.

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

I tillegg til dette er det et annet format spesifisert kjent som fixed, som viser flytende tall i desimalformat.

Det ligner på å vise flytende tall ved bare å bruke coututen setprecision(), bortsett fra det faktum som fixedviser tall opptil 6 desimaler.

På den annen side coutviser bare bruk sifre i henhold til den spesifikke kompilatoren (6 sifre totalt når det gjelder MinGW kompilator , inkludert sifrene før desimaltegnet).

Eksempel 4: Faste og vitenskapelige 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; )

Produksjon

 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;

Merk: Datatypene med flytende punkt som støttes av C ++ er float, doubleog long double. Det er ingen long float.

Interessante artikler...