Šioje pamokoje su pavyzdžių pagalba sužinosime apie „float“ ir „double data“ tipus. Mes taip pat išnagrinėsime keletą pagrindinių skirtumų tarp jų ir kada juos naudoti.
C ++ slankiojo kablelio reikšmėms naudojami abu float
ir double
duomenų tipai. Kintamieji skaičiai naudojami dešimtainėms ir eksponentinėms reikšmėms. Pavyzdžiui,
// 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
Privalome pridėti galūnę f
arba vertės F
pabaigoje float
. Taip yra todėl, kad kompiliatorius dešimtaines reikšmes aiškina be priesagos kaip double
.
Apsvarstykite šį kodą.
float a = 5.6;
Čia kintamajam priskyrėme double
vertę float
.
Tokiu atveju kompiliatorius automatiškai paverčia 5.6float
prieš priskiriant kintamajam a. Tai gali sukelti duomenų praradimą. Norėdami sužinoti daugiau, apsilankykite C ++ tipo konversijoje.
Skirtumas tarp plūduriuojančio ir dvigubo
plūdė | dvigubai |
---|---|
Dydis: 4 baitai | Dydis: 8 baitai |
Tikslumas: Apskritai tikslumas yra 7 skaitmenys po kablelio | Tikslumas: Apskritai, 15 skaitmenų po kablelio tikslumas |
Pavyzdys: 3.56f ir 3e5f kt. | Pavyzdys: 3.56 ir 3e5 kt. |
Pastaba: nebent turite konkretų reikalavimą, visada naudokite double
vietoj float
, nes float
kintamieji gali sukelti klaidų dirbdami su dideliu skaičiumi.
1 pavyzdys: C ++ plūduriuojantis ir dvigubas
#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; )
Rezultatas
Dvigubo tipo numeris = 3,91235 Plūduriuojančio tipo numeris = 3,91235
Pastaba: Šiame pavyzdyje naudojamas kompiliatorius („MinGW compiler“) leido naudoti 6 skaitmenis. Taigi kompiliatorius suapvalino ir karpė mūsų kintamas reikšmes iki 6 skaitmenų.
setprecision (), nurodant dešimtainius taškus
cout
Naudodami setprecision()
funkciją, galime nurodyti dešimtainių taškų skaičių, kurį norite atspausdinti .
Ši funkcija apibrėžta iomanip
antraštės faile, kuris reiškia manipuliavimą įvestimi / išvestimi .
2 pavyzdys: Setprecision () naudojimas slankiųjų kablelių skaičiams
#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; )
Rezultatas
Dvigubas tipo numeris = 3,912348239293 Plūduriuojančio tipo numeris = 3,912348270416
Kaip matome iš aukščiau pateikto pavyzdžio, mes nurodėme tikslumą iki 13 skaitmenų.
cout << setprecision(13);
Slankiojo kablelio reikšmę, kurią priskyrėme savo kintamiesiems, taip pat sudaro 13 skaitmenų.
Tačiau kadangi float
tikslumas yra tik 7 skaitmenys, viršijus tikslumą , rodomos šiukšlių vertės .
Mūsų double
kintamasis rodo teisingą skaičių, nes jo tikslumas yra 15 skaitmenų, o pats skaičius susideda iš 13 skaitmenų.
Kaip alternatyvą, spausdindami galime nurodyti skirtingus kintamųjų tikslumus.
3 pavyzdys: Skirtingi kintamųjų tikslumai
#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; )
Rezultatas
Dvigubo tipo numeris = 3,9123482393 Plūduriuojančio tipo numeris = 3,912348
Iš aukščiau pateiktos programos galime pamatyti, kad nustatėme dvi skirtingas tikslumo reikšmes float
ir double
.
Abiem atvejais tikslumas yra mažesnis nei tikrieji skaičiaus skaitmenys. Taigi paskutinis skaitmuo suapvalinamas, o likusi dalis sutrumpinama.
Pastaba: Jei nurodysime tikslumą, didesnį už paties duomenų tipo tikslumą (7 už float
ir 15 už double
), kompiliatorius pateiks mums šiukšlių vertes, kai bus viršyta tikslumo riba, kaip matyti float
iš 2 pavyzdžio išvesties .
Darbas su eksponentiniais skaičiais
Kaip minėta pirmiau, float
ir double
taip pat gali būti naudojamas atstovauti eksponentinio numerius . Pavyzdžiui,
// ex = 325 X (10 25) double ex = 325E25;
C ++ pateikia eksponentinius skaičius ir labai didelius skaičius tokiu formatu, kuris vadinamas moksliniu formatu. Pagal numatytuosius nustatymus kintamasis ex bus pateiktas tokiu formatu, nes tai labai didelis skaičius.
Norėdami priversti C ++ rodyti slankiojo kablelio skaičius scientific
formatu, neatsižvelgdami į skaičiaus dydį, mes naudojame formato specifikatorių scientific
viduje cout
.
double num = 3.25; // ex = 325 X (10 25) double ex = 325E25; // using scientific format cout << scientific << num; cout << scientific << ex;
Be to, yra dar vienas formato specifikatorius, žinomas kaip fixed
, kuris rodo slankiųjų kablelių skaičius dešimtainiu formatu.
Tai panašu į slankiųjų kablelių skaičių rodymą naudojant tik cout
be setprecision()
, išskyrus tai, kad fixed
rodomi skaičiai iki 6 skaitmenų po kablelio.
Kita vertus, naudojant tik cout
rodomuosius skaitmenis pagal konkretų kompiliatorių (6 „ MinGW“ kompiliatoriaus skaitmenys, įskaitant skaitmenis prieš kablelį).
4 pavyzdys: fiksuoti ir moksliniai formatai
#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; )
Rezultatas
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;
Pastaba: slankiojo kablelio duomenų tipai palaiko C ++ yra float
, double
ir long double
. Nėra long float
.