Vlot En dubbele zijn twee primitieve gegevenstypen in C-programmering die worden gebruikt om op te slaan decimale waarden . Ze slaan allebei getallen met drijvende komma op, maar ze verschillen in de nauwkeurigheid waarmee ze de waarden kunnen opslaan.
In dit artikel zullen we ze allemaal in detail bestuderen, hun geheugenrepresentatie en het verschil daartussen.
Vlot
Float wordt gebruikt om drijvende-kommagetallen met enkele precisie op te slaan. Het kan decimale waarden opslaan met een nauwkeurigheid van maximaal 6-7 decimalen.
Syntaxis
float var_name ;>
- De maat van de vlotter is 4 bytes.
- Float kan waarden opslaan variërend van 3,4 x 10-38tot 3,4x 1038.
- Het kan waarden opslaan tot 7 decimalen zonder verlies van nauwkeurigheid.
- De formaatspecificatie voor float is %F.
Voorbeeld
C
java cast int naar string
// 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;> }> |
>
>
reis maarUitvoer
Float value is 789.123474>
Zoals je in de bovenstaande uitvoer kunt zien, gaat de precisie van decimale getallen na het zevende cijfer verloren vanwege het beperkte aantal bits in float. In deze gevallen wordt een dubbel datatype aanbevolen.
Opmerking: Alle letterlijke getallen van reële getallen zijn standaard van het dubbele type. We kunnen een toevoegen F aan het einde van de letterlijke tekst om het als float-type te definiëren.
Dubbele
Dubbel wordt gebruikt om drijvende-kommawaarden met dubbele precisie op te slaan. Het is de grotere versie van float die reële getallen met precisie tot 15 decimalen kan opslaan.
- De grootte van de dubbele is 8 bytes.
- Het bereik van dubbel is 1,7×10-308tot 1,7×10+308.
- Het kan waarden opslaan tot 15 decimalen zonder verlies van nauwkeurigheid.
- De formaatspecificatie voor dubbel is %lf
Voorbeeld
C
hashmap-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;> }> |
nick pulos zwarte bliksem
>
>Uitvoer
Double value is 789.123456>
Hoe float en double worden opgeslagen?
C-taal volgt de IEEE 754-standaard voor het weergeven van drijvende-kommawaarden in het geheugen. In tegenstelling tot het int-type dat rechtstreeks in binaire vorm in het geheugen wordt opgeslagen, worden de float-waarden in twee delen verdeeld: exponent en mantisse, en vervolgens opgeslagen.
Volgens IEEE 754 bestaan de drijvende-kommawaarden uit 3 componenten:
- Tekenbit: Dit vertegenwoordigt het teken van het getal. 0 staat voor positief, terwijl 1 negatief is. Vertekende exponent: De exponent van het getal kan niet direct worden opgeslagen omdat deze zowel negatief als positief kan zijn. Daarom gebruiken we een vertekende exponent waarbij we enige vertekening aan de exponent toevoegen. Genormaliseerde mantisse: Matissa is het getal in wetenschappelijke notatie, d.w.z. precisiebits van het getal.
C float Geheugenrepresentatie
De grootte van de float is 32-bit, waarvan:
selectie sorteren
- Het meest significante bit (MSB) wordt gebruikt om de gegevens op te slaan teken van het nummer.
- De volgende 8 bits worden gebruikt voor het opslaan van de exponent.
- De overige 23 bits worden gebruikt voor het opslaan van de mantisse.
Voorbeeld
Laten we 65.125 als decimaal getal nemen dat we in het geheugen willen opslaan.
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 dubbele geheugenrepresentatie
De grootte van de float is 32-bit, waarvan:
- Het meest significante bit (MSB) wordt gebruikt om de gegevens op te slaan teken van het nummer.
- De volgende 11 bits worden gebruikt voor het opslaan van de exponent.
- De overige 52 bits worden gebruikt voor het opslaan van de mantisse.
Voorbeeld
Laten we het voorbeeld nemen van hetzelfde nummer 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>
Verschillen tussen float en dubbel
Punten | Vlot | Dubbele |
|---|---|---|
| Precisie | Float is een IEEE 754 drijvende komma met enkele precisie, die precisie tot 7 decimalen biedt. | Double is een IEEE 754 drijvende-komma met dubbele precisie die precisie biedt tot 15 decimalen. |
| Geheugengebruik | Float gebruikt 32 bits of 4 bytes geheugen. | Double gebruikt 64 bits of 8 bytes geheugen. |
| Bereik | Float kan waarden opslaan variërend van 3,4 x 10-38tot 3,4 x 10+38. | Het bereik van dubbel is 1,7×10-308tot 1,7×10+308. |
| Formaatspecificatie | %F is de formaatspecificatie voor float. | %lf is de formaatspecificatie voor dubbel. |
| Geheugenrepresentatie | Teken = 1 bit Exponent = 8 bits Mantisse = 23 bits | Teken = 1 bit Exponent = 11 bits Mantisse = 52 bits |
Conclusie
Concluderend gebruikt C zowel float als double voor decimale getallen, maar deze variëren in termen van precisie, geheugengebruik, bereik en snelheid. Wanneer de ruimte beperkt is en de precisie in het gedrang kan komen, is het beter om daar float te gebruiken, terwijl double wordt gebruikt voor uiterst nauwkeurige toepassingen waarbij ruimte geen probleem is. Het is essentieel om het juiste gegevenstype te kiezen op basis van de vereisten van de applicatie.