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 float
og double
datatyper 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 f
eller F
på slutten av en float
verdi. Dette er fordi kompilatoren tolker desimalverdier uten suffikset som double
.
Vurder denne koden.
float a = 5.6;
Her har vi tilordnet en double
verdi til en float
variabel.
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 , 3e5f etc. | Eksempel: 3.56 , 3e5 etc. |
Merk: Med mindre du har et spesifikt krav, bruk alltid i double
stedet for float
, da float
variabler 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 cout
ved å bruke setprecision()
funksjonen.
Denne funksjonen er definert i iomanip
headerfilen, 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 float
har en presisjon på opptil 7 sifre, viser den søppelverdier etter at presisjonen er overskredet.
Våre double
variable 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 float
og 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 float
og 15 for double
), vil kompilatoren gi oss søppelverdier etter at presisjonsgrensen er overskredet, som det fremgår av float
utdataene i eksempel 2 .
Arbeid med eksponentielle tall
Som nevnt ovenfor, float
og double
kan 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 scientific
formatet uavhengig av størrelsen på tallet, bruker vi formatspesifikasjonen scientific
inne 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 cout
uten setprecision()
, bortsett fra det faktum som fixed
viser tall opptil 6 desimaler.
På den annen side cout
viser 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
, double
og long double
. Det er ingen long float
.