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 float
ja double
andmetüü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 f
või väärtuse F
lõ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 double
vää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 , 3e5f jne | Näide: 3.56 , 3e5 jne |
Märkus. Kui teil pole konkreetset nõuet, kasutage alati double
asemel float
, sest float
muutujad 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 cout
abil saame täpsustada komakohtade arvu, millesse printida setprecision()
.
See funktsioon on määratletud iomanip
pä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 float
selle täpsus on kuni 7 numbrit, näitab see prügiväärtusi pärast selle täpsuse ületamist.
Meie double
muutuja 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 float
ja 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 float
ja 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, float
ja double
võ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 scientific
formaadis, olenemata numbri suurusest, kasutame vorminguspetsifikaatorit selle scientific
sees 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 cout
ilma setprecision()
, välja arvatud see, et fixed
numbrid kuvatakse kuni 6 kümnendkohani.
Teiselt poolt, ainult cout
kuvarite 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
, double
ja long double
. Ei ole long float
.