logo

C Float un Double

Pludiņš un dubultā ir divi primitīvi datu tipi C programmēšanā, ko izmanto glabāšanai decimālvērtības . Tajos abos tiek saglabāti peldošā komata skaitļi, taču tie atšķiras ar precizitātes līmeni, kādā tie var saglabāt vērtības.

Šajā rakstā mēs detalizēti izpētīsim katru no tiem, to atmiņu attēlojumu un atšķirību starp tiem.



Pludiņš

Pludiņš tiek izmantots, lai saglabātu vienas precizitātes peldošā komata skaitļus. Tas var saglabāt decimāldaļas ar precizitāti līdz 6-7 zīmēm aiz komata.

Sintakse

 float var_name ;>
  • Pludiņa izmērs ir 4 baiti.
  • Float var saglabāt vērtības, kas atšķiras no 3,4 x 10-38līdz 3,4 x 1038.
  • Tajā var saglabāt vērtības līdz 7 komata nezaudējot precizitāti.
  • Formāta specifikācija peldēšanai ir %f.

Piemērs

C




pārvērst char par int java





// C Program to illustrate float> #include> > int> main()> {> >// Syntax of declaring and initializing> >// the float variable> >float> myVariable = 789.123456f;> > >// printing floating point number> >printf>(>'Float value is %f'>, myVariable);> >return> 0;> }>

>

>

Izvade

gimp mainīt krāsu
Float value is 789.123474>

Kā redzat iepriekš sniegtajā izvadē, decimālskaitļu precizitāte tiek zaudēta pēc 7. cipara ierobežoto bitu skaita dēļ. Šādos gadījumos ieteicams izmantot dubultu datu tipu.

Piezīme: Visi reālie skaitļu literāļi pēc noklusējuma ir dubultā tipa. Mēs varam pievienot an f burta beigās, lai to definētu kā pludiņa veidu.

Dubults

Double tiek izmantots, lai saglabātu dubultās precizitātes peldošā komata vērtības. Tā ir lielāka pludiņa versija, kurā var saglabāt reālus skaitļus ar precizitāti līdz 15 zīmēm aiz komata.

  • Dubults izmērs ir 8 baiti.
  • Dubultā diapazons ir 1,7 × 10-308līdz 1,7 × 10+308.
  • Tajā var saglabāt vērtības līdz 15 zīmes aiz komata nezaudējot precizitāti.
  • Dubultā formāta specifikācija ir %lf

Piemērs

C


char uz int java



#include> > int> main()> {> >// Syntax of declaring and initializing> >// the double variable> >double> myVariable = 789.123456;> >printf>(>'Double value is %lf'>, myVariable);> >//%lf or %f both can be used to> >// print Float values> >return> 0;> }>

priekšpasūtīšanas šķērsošana
>

>

Izvade

Double value is 789.123456>

Kā tiek uzglabāts pludiņš un dubultā?

C valoda seko IEEE 754 standarts peldošā komata vērtību attēlošanai atmiņā. Atšķirībā no int tipa, kas tiek tieši saglabāts atmiņā binārā formā, peldošās vērtības ir sadalītas divās daļās: eksponentā un mantisā, un pēc tam tiek saglabātas.

string java aizstāt

Saskaņā ar IEEE 754 peldošā komata vērtības sastāv no 3 komponentiem:

    Zīmes bits: tas apzīmē skaitļa zīmi. 0 apzīmē pozitīvu, bet 1 apzīmē negatīvu. Nobīdīts eksponents: skaitļa eksponentu nevar tieši saglabāt, jo tas var būt gan negatīvs, gan pozitīvs, tāpēc mēs izmantojam neobjektīvu eksponentu, kurā eksponentam pievienojam nelielu novirzi. Normalizēta mantisa: Matisa ir skaitlis zinātniskajā apzīmējumā, t.i., skaitļa precizitātes biti.

C float atmiņas attēlojums

Pludiņa izmērs ir 32 biti, no kuriem:

    Nozīmīgākais bits (MSB) tiek izmantots, lai saglabātu zīme no numura.
  • Nākamais 8 biti tiek izmantoti, lai uzglabātu eksponents.
  • Atlikušie 23 biti tiek izmantoti, lai uzglabātu mantisa.
pludiņa attēlojums atmiņā

Piemērs

Ņemsim 65.125 kā decimālo skaitli, ko vēlamies saglabāt atmiņā.

Converting to Binary form, we get: 65 = 1000001 0.125 = 001 So, 65.125 = 1000001.001 = 1.000001001 x 106 Normalized Mantissa = 000001001 Now, according to the standard, we will get the baised exponent by adding the exponent to 127, = 127 + 6 = 133 Baised exponent = 10000101 And the signed bit is 0 (positive) So, the IEEE 754 representation of 65.125 is, 0 10000101 00000100100000000000000>

C dubultā atmiņas attēlojums

Pludiņa izmērs ir 32 biti, no kuriem:

    Nozīmīgākais bits (MSB) tiek izmantots, lai saglabātu zīme no numura.
  • Nākamais 11 biti tiek izmantoti, lai uzglabātu eksponents.
  • Atlikušie 52 biti tiek izmantoti, lai uzglabātu mantisa.
dubultā attēlojums atmiņā

Piemērs

Ņemsim piemēru ar to pašu skaitli 65.125,

From above, 65.5 = 1.000001001 x 106 Normalized Mantissa = 000001001 Now, according to the standard, bais is 1023. So, = 1023 + 6 = 1029 Baised exponent = 10000000101 And the signed bit is 0 (positive) So, the IEEE 754 representation of 65.125 is, 0 10000000101 0000010010000000000000000000000000000000000000000000>

Atšķirības starp peldošo un dubulto

Punkti

Pludiņš

Dubults

Precizitāte Float ir vienas precizitātes IEEE 754 peldošais komats, kas nodrošina precizitāti līdz 7 zīmēm aiz komata. Double ir dubultas precizitātes IEEE 754 peldošais komats, kas nodrošina precizitāti līdz 15 zīmēm aiz komata.
Atmiņas lietojums Float izmanto 32 bitu vai 4 baitu atmiņu. Double izmanto 64 bitu vai 8 baitu atmiņu.
Diapazons Pludiņš var saglabāt vērtības no 3,4 x 10-38līdz 3,4 x 10+38. Dubultā diapazons ir 1,7 × 10-308līdz 1,7 × 10+308.
Formāta norādītājs %f ir pludiņa formāta norādītājs. %lf ir dubultā formāta norādītājs.
Atmiņas attēlojums Zīme = 1 bits
Eksponents = 8 biti
Mantisa = 23 biti
Zīme = 1 bits
Eksponents = 11 biti
Mantisa = 52 biti

Secinājums

Visbeidzot, C decimālskaitļiem izmanto gan peldošos, gan dubultos skaitļus, taču tie atšķiras precizitātes, atmiņas lietojuma, diapazona un ātruma ziņā. Ja vieta ir ierobežota un precizitāte var tikt apdraudēta, labāk ir izmantot pludiņu, savukārt double tiek izmantots augstas precizitātes lietojumiem, kur telpa nav problēma. Ir svarīgi izvēlēties piemērotu datu veidu, pamatojoties uz lietojumprogrammas prasībām.