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