logo

C Float a Double

Plavák a dvojitý sú dva primitívne dátové typy v programovaní C, ktoré sa používajú na ukladanie desiatkové hodnoty . Obidve ukladajú čísla s pohyblivou rádovou čiarkou, ale líšia sa úrovňou presnosti, s ktorou môžu hodnoty ukladať.

V tomto článku budeme podrobne študovať každý z nich, ich zastúpenie v pamäti a rozdiel medzi nimi.



Plavák

Float sa používa na ukladanie čísel s pohyblivou rádovou čiarkou s jednoduchou presnosťou. Dokáže uložiť desatinné hodnoty s presnosťou až na 6-7 desatinných miest.

Syntax

 float var_name ;>
  • Veľkosť plaváka je 4 bajty.
  • Float môže ukladať hodnoty rôzne od 3,4 x 10-38až 3,4 x 1038.
  • Môže uchovávať hodnoty až 7 desatinných miest bez straty presnosti.
  • Špecifikátor formátu pre float je %f.

Príklad

C




vyberte sql z viacerých tabuliek





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

je špeciálna postava
>

>

Výkon

Float value is 789.123474>

Ako môžete vidieť vo vyššie uvedenom výstupe, presnosť desatinných čísel sa stráca po 7. číslici v dôsledku obmedzeného počtu bitov v float. V týchto prípadoch sa odporúča použiť dvojitý typ údajov.

Poznámka: Všetky literály reálnych čísel sú štandardne dvojitého typu. Môžeme pripojiť an f na konci literálu, aby ste ho definovali ako typ float.

java string nahradenie

Dvojité

Double sa používa na uloženie hodnôt s pohyblivou rádovou čiarkou s dvojnásobnou presnosťou. Je to väčšia verzia float, ktorá dokáže ukladať reálne čísla s presnosťou až na 15 desatinných miest.

  • Veľkosť dvojky je 8 bajtov.
  • Rozsah double je 1,7 × 10-308na 1,7×10+308.
  • Môže uchovávať hodnoty až 15 desatinných miest bez straty presnosti.
  • Špecifikátor formátu pre double je %lf

Príklad

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

>

>

reťazec int
Výkon

Double value is 789.123456>

Ako sa skladuje float a double?

Jazyk C nasleduje štandard IEEE 754 na reprezentáciu hodnôt s pohyblivou rádovou čiarkou v pamäti. Na rozdiel od typu int, ktorý je priamo uložený v pamäti v binárnej forme, sú hodnoty float rozdelené na dve časti: exponent a mantisa a následne uložené.

Podľa IEEE 754 sa hodnoty s pohyblivou rádovou čiarkou skladajú z 3 komponentov:

úplná sčítačka
    Sign Bit: Predstavuje znamienko čísla. 0 predstavuje pozitívne, zatiaľ čo 1 predstavuje zápor. Skreslený exponent: Exponent čísla nemožno priamo uložiť, pretože môže byť záporný aj kladný, takže používame skreslený exponent, kde k exponentu pridávame určitú odchýlku. Normalizovaná mantisa: Matissa je číslo vo vedeckej notácii, t. j. presné bity čísla.

C float Reprezentácia pamäte

Veľkosť plaváka je 32-bitová, z toho:

    Najvýznamnejší bit (MSB) sa používa na uloženie znamenie čísla.
  • Nasledovný 8 bitov slúžia na uloženie exponent.
  • Ostávajúce 23 bitov slúžia na uloženie mantisa.
pamäťová reprezentácia plaváka

Príklad

Zoberme si 65,125 ako desatinné číslo, ktoré chceme uložiť do pamäte.

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 dvojité zobrazenie pamäte

Veľkosť plaváka je 32-bitová, z toho:

    Najvýznamnejší bit (MSB) sa používa na uloženie znamenie čísla.
  • Nasledovný 11 bitov slúžia na uloženie exponent.
  • Ostávajúce 52 bitov slúžia na uloženie mantisa.
pamäťová reprezentácia double

Príklad

Vezmime si príklad rovnakého čísla 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>

Rozdiely medzi float a double

Body

Plavák

Dvojité

Presnosť Float je s jednou presnosťou IEEE 754 s pohyblivou rádovou čiarkou, ktorá poskytuje presnosť až na 7 desatinných miest. Double je s dvojitou presnosťou IEEE 754 s pohyblivou rádovou čiarkou, ktorá poskytuje presnosť až na 15 desatinných miest.
Využitie pamäte Float používa 32 bitov alebo 4 bajty pamäte. Double používa 64 bitov alebo 8 bajtov pamäte.
Rozsah Float môže ukladať hodnoty od 3,4 x 10-38až 3,4 x 10+38. Rozsah double je 1,7×10-308na 1,7×10+308.
Špecifikátor formátu %f je špecifikátor formátu pre float. %lf je špecifikátor formátu pre double.
Reprezentácia pamäte Znamienko = 1 bit
Exponent = 8 bitov
Mantisa = 23 bitov
Znamienko = 1 bit
Exponent = 11 bitov
Mantisa = 52 bitov

Záver

Na záver, C používa pre desatinné čísla float aj double, ale líšia sa z hľadiska presnosti, využitia pamäte, rozsahu a rýchlosti. Keď je priestor obmedzený a presnosť môže byť ohrozená, je lepšie použiť float tam, zatiaľ čo double sa používa pre vysoko presné aplikácie, kde priestor nie je problémom. Je dôležité vybrať vhodný typ údajov na základe požiadaviek aplikácie.