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