C ++ plūduriuoja ir dvigubai

Š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 floatir doubleduomenų 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ę farba vertės Fpabaigoje 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 doublevertę 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 3e5fkt. Pavyzdys: 3.56 ir 3e5kt.

Pastaba: nebent turite konkretų reikalavimą, visada naudokite doublevietoj float, nes floatkintamieji 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

coutNaudodami setprecision()funkciją, galime nurodyti dešimtainių taškų skaičių, kurį norite atspausdinti .

Ši funkcija apibrėžta iomanipantraš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 floattikslumas yra tik 7 skaitmenys, viršijus tikslumą , rodomos šiukšlių vertės .

Mūsų doublekintamasis 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 floatir 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ž floatir 15 už double), kompiliatorius pateiks mums šiukšlių vertes, kai bus viršyta tikslumo riba, kaip matyti float2 pavyzdžio išvesties .

Darbas su eksponentiniais skaičiais

Kaip minėta pirmiau, floatir doubletaip 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 scientificformatu, neatsižvelgdami į skaičiaus dydį, mes naudojame formato specifikatorių scientificviduje 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 coutbe setprecision(), išskyrus tai, kad fixedrodomi skaičiai iki 6 skaitmenų po kablelio.

Kita vertus, naudojant tik coutrodomuosius 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, doubleir long double. Nėra long float.

Įdomios straipsniai...