C ++ ujuk ja topelt

Selles õpetuses õpime näidete abil ujuki- ja topeltandmetüüpe. Samuti uurime mõningaid peamisi erinevusi nende vahel ja seda, millal neid kasutada.

C ++, nii floatja doubleandmetüübid kasutatakse murdarv väärtusi. Ujuvate punktide numbreid kasutatakse kümnend- ja eksponentsiaalsete väärtuste jaoks. Näiteks,

 // 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

Peame lisama järelliite fvõi väärtuse Flõppu float. Seda seetõttu, et kompilaator tõlgendab kümnendväärtusi ilma järelliideta kui double.

Mõelge sellele koodile.

 float a = 5.6;

Siin oleme määranud muutujale doubleväärtuse float.

Sel juhul teisendab kompilaator 5.6float automaatselt enne muutujale a määramist. See võib põhjustada andmete kadu. Lisateabe saamiseks külastage jaotist C ++ tüübi teisendamine.

Erinevus ujuki ja topelt

ujuk topelt
Suurus: 4 baiti Suurus: 8 baiti
Täpsus: üldiselt 7 kümnendkohalise täpsusega Täpsus: üldiselt 15 kümnendkoha täpsusega
Näide: 3.56f , 3e5fjne Näide: 3.56 , 3e5jne

Märkus. Kui teil pole konkreetset nõuet, kasutage alati doubleasemel float, sest floatmuutujad võivad suure hulga töötamisel põhjustada vigu.

Näide 1: C ++ ujuk ja topelt

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

Väljund

 Topelttüübi number = 3,91235 Ujuki tüübi number = 3,91235

Märkus . Selle näite jaoks kasutatud kompilaator (MinGW kompilaator) lubas 6 numbrit. Niisiis, meie muutuja väärtused ümardati ja kompilaator kärbiti kuuekohaliseks.

Kümnendkohtade määramiseks sea setprecision ()

Funktsiooni coutabil saame täpsustada komakohtade arvu, millesse printida setprecision().

See funktsioon on määratletud iomanippäisefailis, mis tähistab sisendi / väljundi manipuleerimist .

Näide 2: Setprecision () kasutamine ujukomaarvude jaoks

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

Väljund

 Topelttüübi number = 3,912348239293 Ujuki tüübi number = 3,912348270416

Nagu näeme ülaltoodud näitest, oleme täpsustanud kuni 13 numbrit.

 cout << setprecision(13);

Muutujaile määratud ujukoma väärtus koosneb samuti 13 numbrist.

Kuna floatselle täpsus on kuni 7 numbrit, näitab see prügiväärtusi pärast selle täpsuse ületamist.

Meie doublemuutuja näitab õiget arvu, kuna selle täpsus on 15 numbrit, samas kui number ise koosneb 13 numbrist.

Alternatiivina võime nende muutujate jaoks printimise ajal määrata erinevad täpsused.

Näide 3: Erinevate muutujate erinevad täpsused

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

Väljund

 Topelttüübi number = 3,9123482393 Ujuki tüübi number = 3,912348

Alates programmi eespool näeme, et oleme loonud kaks erinevat täpsuse väärtused floatja double.

Mõlemal juhul on täpsus väiksem kui numbri tegelik arv. Nii et viimane number ümardatakse ja ülejäänud osa kärbitakse.

Märkus. Kui määrame täpsuse, mis on suurem kui andmetüübi enda täpsus (7 for floatja 15 for double), annab kompilaator meile prügiväärtused pärast täpsuspiiri ületamist, nagu on näha näite 2float väljundist .

Töö eksponentsiaalsete numbritega

Nagu eespool mainitud, floatja doublevõib kasutada ka esindada eksponentsiaalse numbrid . Näiteks,

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

C ++ väljastab eksponentsiaalarvud ja väga suured numbrid formaadis, mida nimetatakse teaduslikuks vorminguks. Muutuja ex väljastatakse vaikimisi selles vormingus, kuna see on väga suur arv.

Selleks, et sundida C ++ näitama meie ujukoma numbreid scientificformaadis, olenemata numbri suurusest, kasutame vorminguspetsifikaatorit selle scientificsees cout.

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

Lisaks sellele on veel üks tuntud vorminguspetsifikaator fixed, mis kuvab ujukomaarvud kümnendarvuna.

See sarnaneb ujukomaarvude kuvamisega, kasutades ainult coutilma setprecision(), välja arvatud see, et fixednumbrid kuvatakse kuni 6 kümnendkohani.

Teiselt poolt, ainult coutkuvarite kasutamine vastavalt konkreetsele kompilaatorile (6 numbrit MinGW kompilaatori puhul , kaasa arvatud kümnendkoha eelsed numbrid)

Näide 4: fikseeritud ja teaduslikud vormingud

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

Väljund

 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;

Märkus: ujukoma andmetüübid toetavad C ++ on float, doubleja long double. Ei ole long float.

Huvitavad Artiklid...