logo

C Float ja Double

Kellua ja kaksinkertainen ovat kaksi primitiivistä tietotyyppiä C-ohjelmoinnissa, joita käytetään tallentamiseen desimaaliarvot . Ne molemmat tallentavat liukulukuja, mutta ne eroavat toisistaan ​​siinä tarkkuustasossa, jolla ne voivat tallentaa arvot.

Tässä artikkelissa tutkimme jokaista niistä yksityiskohtaisesti, niiden muistiesitystä ja niiden välistä eroa.



Kellua

Floatia käytetään yhden tarkkuuden liukulukujen tallentamiseen. Se voi tallentaa desimaaliarvoja 6-7 desimaalin tarkkuudella.

Syntaksi

 float var_name ;>
  • Kellun koko on 4 tavua.
  • Float voi tallentaa arvoja, jotka vaihtelevat 3,4 x 10-383,4 x 1038.
  • Se voi tallentaa arvoja jopa 7 desimaalin tarkkuudella tarkkuuden menettämättä.
  • Floatin muotomääritys on %f.

Esimerkki

C




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

>

>

Lähtö

java-taulukko
Float value is 789.123474>

Kuten yllä olevasta lähdöstä näet, desimaalilukujen tarkkuus menetetään 7. numeron jälkeen, koska float-bitit ovat rajoitettuja. Näissä tapauksissa suositellaan kaksinkertaista tietotyyppiä.

Huomautus: Kaikki reaalilukuliteraalit ovat oletusarvoisesti kaksinkertaisia. Voimme liittää an f literaalin lopussa määrittääksesi sen float-tyypiksi.

Kaksinkertainen

Double käytetään kaksinkertaisen tarkkuuden liukulukuarvojen tallentamiseen. Se on floatin suurempi versio, joka voi tallentaa reaalilukuja jopa 15 desimaalin tarkkuudella.

  • Tuplauksen koko on 8 tavua.
  • Kaksinkertaisen valikoima on 1,7 × 10-3081,7 × 10:een+308.
  • Se voi tallentaa arvoja jopa 15 desimaalin tarkkuudella tarkkuuden menettämättä.
  • Double-muodon määrittäjä on %lf

Esimerkki

C


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

java pgm
>

>

Lähtö

Double value is 789.123456>

Kuinka float ja double säilytetään?

C-kieli seuraa IEEE 754 -standardi liukulukuarvojen esittämiseen muistissa. Toisin kuin int-tyyppi, joka tallennetaan suoraan muistiin binäärimuodossa, float-arvot jaetaan kahteen osaan: eksponenttiin ja mantissaan, ja sitten ne tallennetaan.

jpa vs hibernate

IEEE 754:n mukaan liukulukuarvot koostuvat kolmesta osasta:

    Merkkibitti: Tämä edustaa numeron etumerkkiä. 0 tarkoittaa positiivista ja 1 negatiivista. Biased eksponentti: Lukujen eksponenttia ei voida tallentaa suoraan, koska se voi olla sekä negatiivinen että positiivinen, joten käytämme puolueellista eksponenttia, jossa lisäämme eksponenttia jonkin verran. Normalisoitu mantissa: Matissa on luku tieteellisessä merkinnässä, eli luvun tarkkuusbittejä.

C float -muistin esitys

Floatin koko on 32-bittinen, josta:

    Merkittävin bitti (MSB) tallennetaan merkki numerosta.
  • Seuraava 8 bittiä käytetään säilyttämään eksponentti.
  • Jäljellä oleva 23 bittiä käytetään säilyttämään mantissa.
float muistiesitys

Esimerkki

Otetaan 65,125 desimaaliluvuksi, jonka haluamme tallentaa muistiin.

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

Floatin koko on 32-bittinen, josta:

    Merkittävin bitti (MSB) tallennetaan merkki numerosta.
  • Seuraava 11 bittiä käytetään säilyttämään eksponentti.
  • Jäljellä oleva 52 bittiä käytetään säilyttämään mantissa.
kaksoiskappaleen muistiesitys

Esimerkki

Otetaan esimerkki samasta numerosta 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>

Erot kelluvan ja tuplauksen välillä

Pisteet

Kellua

Kaksinkertainen

Tarkkuus Float on yhden tarkkuuden IEEE 754 liukuluku, joka tarjoaa jopa 7 desimaalin tarkkuuden. Double on kaksinkertainen tarkkuus IEEE 754 liukuluku, joka tarjoaa jopa 15 desimaalin tarkkuuden.
Muistin käyttö Float käyttää 32 bittiä tai 4 tavua muistia. Double käyttää 64 bittiä tai 8 tavua muistia.
Alue Float voi tallentaa arvoja, jotka vaihtelevat välillä 3,4 x 10-383,4 x 10:een+38. Tupla-alue on 1,7 × 10-3081,7 × 10:een+308.
Muotomäärittäjä %f on float-muodon määrittäjä. %lf on double-muodon määrittäjä.
Muistin esitys Merkki = 1 bitti
Eksponentti = 8 bittiä
Mantissa = 23 bittiä
Merkki = 1 bitti
Eksponentti = 11 bittiä
Mantissa = 52 bittiä

Johtopäätös

Yhteenvetona voidaan todeta, että C käyttää sekä float- että double-lukua desimaalilukuihin, mutta ne vaihtelevat tarkkuuden, muistin käytön, kantaman ja nopeuden suhteen. Kun tilaa on rajoitetusti ja tarkkuus voi vaarantua, on parempi käyttää kelluketta, kun taas double -sovellusta käytetään erittäin tarkkoihin sovelluksiin, joissa tila ei ole ongelma. On tärkeää valita sopiva tietotyyppi sovelluksen vaatimusten perusteella.