Šajā apmācībā mēs uzzināsim par pludiņa un dubulto datu tipiem, izmantojot piemērus. Mēs arī aplūkosim dažas galvenās atšķirības starp tām un kad tās izmantot.
C ++, gan float
un double
datu tipi tiek izmantoti peldošā punktu vērtībām. Peldošā komata skaitļus izmanto decimāldaļām un eksponenciālām vērtībām. Piemēram,
// 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
Mums jāpievieno sufikss f
vai vērtības F
beigās float
. Tas notiek tāpēc, ka kompilators decimālvērtības bez sufiksa interpretē kā double
.
Apsveriet šo kodu.
float a = 5.6;
Šeit mēs esam piešķīruši mainīgajam double
vērtību float
.
Šajā gadījumā kompilators automātiski pārvērš 5.6,float
pirms tas tiek piešķirts mainīgajam a. Tas var izraisīt datu zudumu. Lai uzzinātu vairāk, apmeklējiet C ++ tipa pārveidošanu.
Starpība starp pludiņu un dubulto
peldēt | dubultā |
---|---|
Izmērs: 4 baiti | Izmērs: 8 baiti |
Precizitāte: Parasti precizitāte ir 7 cipari aiz komata | Precizitāte: Parasti precizitāte ir 15 zīmes aiz komata |
Piemērs: 3.56f , 3e5f uc | Piemērs: 3.56 , 3e5 uc |
Piezīme. Ja vien jums nav konkrētu prasību, vienmēr izmantojiet double
nevis float
, jo float
mainīgie var būt pakļauti kļūdām, strādājot ar lielu skaitu.
1. piemērs: C ++ pludiņš un dubultā
#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; )
Rezultāts
Dubultā tipa numurs = 3,91235 Peldošā tipa numurs = 3,91235
Piezīme. Šajā piemērā izmantotais kompilators (MinGW kompilators) atļāva 6 ciparus. Tātad kompilators noapaļoja un mainīja mūsu mainīgās vērtības līdz 6 cipariem.
setprecision (), lai norādītu decimālzīmes
Mēs varam norādīt skaitu aiz punktiem drukāt cout
, izmantojot setprecision()
funkciju.
Šī funkcija ir definēta iomanip
galvenes failā, kas nozīmē ieejas / izvades manipulācijas .
2. piemērs: Setprecision () izmantošana peldošā komata numuriem
#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; )
Rezultāts
Dubultā tipa numurs = 3,912348239293 Pludiņa tipa numurs = 3,912348270416
Kā redzams no iepriekš minētā piemēra, mēs esam norādījuši precizitāti līdz 13 cipariem.
cout << setprecision(13);
Peldošā komata vērtība, ko esam piešķīruši saviem mainīgajiem, sastāv arī no 13 cipariem.
Tā float
kā precizitāte ir tikai līdz 7 cipariem, pēc precizitātes pārsniegšanas tā parāda atkritumu vērtības .
Mūsu double
mainīgais parāda pareizo skaitli, jo tā precizitāte ir 15 cipari, bet pats skaitlis sastāv no 13 cipariem.
Kā alternatīvu mēs varam norādīt atšķirīgu precizitāti dažādiem mainīgajiem lielumiem, tos drukājot.
3. piemērs: Dažādu mainīgo precizitāte
#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; )
Rezultāts
Dubultā tipa numurs = 3,9123482393 Peldošā tipa numurs = 3,912348
No iepriekš minētās programmas mēs varam redzēt, ka esam iestatījuši divas dažādas precizitātes vērtības float
un double
.
Abos gadījumos precizitāte ir mazāka par faktiskajiem skaitļa cipariem. Tātad pēdējais cipars ir noapaļots, bet pārējais tiek saīsināts.
Piezīme: Ja mēs norādām precizitāti, kas ir lielāka par paša datu veida precizitāti (7 par float
un 15 par double
), tad pēc precizitātes ierobežojuma pārsniegšanas kompilators mums sniegs atkritumu vērtības, kā redzams ar float
2. piemēra izvadi .
Darbs ar eksponenciālajiem numuriem
Kā minēts iepriekš, float
un to double
var izmantot arī eksponenciālo skaitļu attēlošanai . Piemēram,
// ex = 325 X (10 25) double ex = 325E25;
C ++ izved eksponenciālos skaitļus un ļoti lielus skaitļus formātā, ko sauc par zinātnisko formātu. Mainīgais lielums ex pēc noklusējuma tiks parādīts šajā formātā, jo tas ir ļoti liels skaitlis.
Lai piespiestu C ++ mūsu peldošā komata numurus parādīt scientific
formātā neatkarīgi no skaitļa lieluma, mēs scientific
iekšpusē izmantojam formāta specifikatoru cout
.
double num = 3.25; // ex = 325 X (10 25) double ex = 325E25; // using scientific format cout << scientific << num; cout << scientific << ex;
Papildus tam ir vēl viens formāta norādītājs, kas pazīstams kā fixed
peldošā komata skaitļi decimāldaļā.
Tas ir līdzīgs peldošo punktu skaitļu parādīšanai, izmantojot tikai cout
bez setprecision()
, izņemot to, ka fixed
tiek rādīti skaitļi līdz 6 zīmēm aiz komata.
No otras puses, tikai izmantojot cout
displeja ciparus atbilstoši konkrētajam kompilatoram (6 kopējie cipari MinGW kompilatora gadījumā , ieskaitot ciparus pirms komata).
4. piemērs: Fiksētie un zinātniskie formāti
#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; )
Rezultāts
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;
Piezīme: Ar peldošā komata datu tipi atbalstītie C ++, ir float
, double
un long double
. Nav long float
.