logo

C Lebdeči in dvojni

Lebdi in dvojno sta dve primitivni vrsti podatkov v programiranju C, ki se uporabljata za shranjevanje decimalne vrednosti . Oba hranita števila s plavajočo vejico, vendar se razlikujeta po stopnji natančnosti, do katere lahko shranita vrednosti.

V tem članku bomo podrobno preučili vsakega od njih, njihovo spominsko predstavitev in razliko med njimi.



Lebdi

Float se uporablja za shranjevanje števil s plavajočo vejico z enojno natančnostjo. Lahko shrani decimalne vrednosti z natančnostjo do 6-7 decimalnih mest.

Sintaksa

 float var_name ;>
  • Velikost plovca je 4 bajti.
  • Float lahko shrani vrednosti, ki se razlikujejo od 3,4 x 10-38na 3,4 x 1038.
  • Lahko shrani vrednosti do 7 decimalnih mest brez izgube natančnosti.
  • Specifikator formata za float je %f.

Primer

C




vadnica za java swing





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

>

iphone emoji na telefonu android

>

Izhod

Float value is 789.123474>

Kot lahko vidite v zgornjem izhodu, se natančnost decimalnih števil izgubi po 7. števki zaradi omejenih bitov v float. V teh primerih se priporoča dvojni podatkovni tip.

Opomba: Vsi literali realnih števil so privzeto dvojnega tipa. Dodamo lahko f na koncu dobeseda, da ga definirate kot plavajoči tip.

Dvojno

Double se uporablja za shranjevanje vrednosti dvojne natančnosti s plavajočo vejico. Je večja različica float, ki lahko shrani realna števila z natančnostjo do 15 decimalnih mest.

primerjava nizov c#
  • Velikost dvojnika je 8 bajtov.
  • Razpon dvojnega je 1,7×10-308do 1,7×10+308.
  • Lahko shrani vrednosti do 15 decimalnih mest brez izgube natančnosti.
  • Specifikator formata za dvojno je %lf

Primer

C




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

>

>

Izhod

pripravite se na testni mockito
Double value is 789.123456>

Kako sta shranjena float in double?

Jezik C sledi standard IEEE 754 za predstavitev vrednosti s plavajočo vejico v pomnilniku. Za razliko od vrste int, ki je neposredno shranjena v pomnilniku v binarni obliki, so vrednosti s plavajočim delom razdeljene na dva dela: eksponent in mantiso ter nato shranjene.

Po IEEE 754 so vrednosti s plavajočo vejico sestavljene iz 3 komponent:

    Bit predznaka: To predstavlja predznak števila. 0 predstavlja pozitivno, medtem ko 1 predstavlja negativno. Pristranski eksponent: Eksponenta števila ni mogoče neposredno shraniti, saj je lahko negativen ali pozitiven, zato uporabljamo pristranski eksponent, kjer eksponentu dodamo nekaj pristranskosti. Normalizirana mantisa: Matisa je število v znanstvenem zapisu, tj. natančni deli števila.

C float predstavitev pomnilnika

Velikost float je 32-bitna, od tega:

    Najpomembnejši bit (MSB) se uporablja za shranjevanje znak števila.
  • Naslednji 8 bitov se uporabljajo za shranjevanje eksponent.
  • Preostanek 23 bitov se uporabljajo za shranjevanje mantisa.
spominska predstavitev float

Primer

Vzemimo 65,125 kot decimalno število, ki ga želimo shraniti v pomnilnik.

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 dvojna predstavitev spomina

Velikost float je 32-bitna, od tega:

    Najpomembnejši bit (MSB) se uporablja za shranjevanje znak števila.
  • Naslednji 11 bitov se uporabljajo za shranjevanje eksponent.
  • Preostanek 52 bitov se uporabljajo za shranjevanje mantisa.
spominska predstavitev dvojnika

Primer

java priorityqueue

Vzemimo primer iste številke 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>

Razlike med float in double

Točke

Lebdi

Dvojno

Natančnost Float je plavajoča vejica z enojno natančnostjo IEEE 754, ki zagotavlja natančnost do 7 decimalnih mest. Double je plavajoča vejica IEEE 754 z dvojno natančnostjo, ki zagotavlja natančnost do 15 decimalnih mest.
Poraba pomnilnika Float uporablja 32 bitov ali 4 bajte pomnilnika. Double uporablja 64 bitov ali 8 bajtov pomnilnika.
Razpon Float lahko shrani vrednosti, ki se razlikujejo od 3,4 x 10-38na 3,4 x 10+38. Razpon dvojnega je 1,7×10-308do 1,7×10+308.
Specifikator formata %f je specifikator formata za float. %lf je specifikator formata za dvojno.
Predstavitev spomina Predznak = 1 bit
Eksponent = 8 bitov
Mantisa = 23 bitov
Predznak = 1 bit
Eksponent = 11 bitov
Mantisa = 52 bitov

Zaključek

Skratka, C uporablja tako float kot double za decimalna števila, vendar se razlikujejo glede na natančnost, porabo pomnilnika, obseg in hitrost. Kadar je prostor omejen in je natančnost lahko ogrožena, je tam bolje uporabiti float, medtem ko se dvojno uporablja za visokonatančne aplikacije, kjer prostor ni problem. Bistveno je, da izberete ustrezen tip podatkov glede na zahteve aplikacije.