Flyde og dobbelt er to primitive datatyper i C-programmering, der bruges til at gemme decimalværdier . De gemmer begge flydende kommanumre, men de adskiller sig i det præcisionsniveau, som de kan gemme værdierne til.
I denne artikel vil vi studere hver af dem i detaljer, deres hukommelsesrepræsentation og forskellen mellem dem.
Flyde
Float bruges til at gemme enkeltpræcisions flydende kommatal. Den kan gemme decimalværdier med præcision op til 6-7 decimaler.
Syntaks
float var_name ;>
- Størrelsen på flyderen er 4 bytes.
- Float kan gemme værdier, der varierer fra 3,4 x 10-38til 3,4 x 1038.
- Den kan gemme værdier op til 7 decimaler uden tab af præcision.
- Formatspecifikationen for float er %f.
Eksempel
C
: i java
matematik tilfældig 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;> }> |
>
>Produktion
Float value is 789.123474>
Som du kan se i ovenstående output, går præcisionen af decimaltal tabt efter det 7. ciffer på grund af de begrænsede bits i float. I disse tilfælde anbefales en dobbelt datatype.
Bemærk: Alle bogstaver i reelle tal er som standard af dobbelt type. Vi kan tilføje en f i slutningen af bogstavet for at definere det som float-type.
Dobbelt
Dobbelt bruges til at lagre dobbelte præcisions flydende kommaværdier. Det er den større version af float, som kan gemme reelle tal med præcision op til 15 decimaler.
- Størrelsen af det dobbelte er 8 bytes.
- Udvalget af dobbelt er 1,7×10-308til 1,7×10+308.
- Den kan gemme værdier op til 15 decimaler uden tab af præcision.
- Formatspecifikationen for dobbelt er %lf
Eksempel
C
java tuple
#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;> }> |
>
arraylist java sortering
>Produktion
Double value is 789.123456>
Hvordan opbevares float og double?
C-sproget følger IEEE 754 standard til at repræsentere flydende kommaværdier i hukommelsen. I modsætning til int-typen, der er lagret direkte i hukommelsen i binær form, er float-værdierne opdelt i to dele: eksponent og mantisse og derefter lagret.
Ifølge IEEE 754 består de flydende kommaværdier af 3 komponenter:
- Sign Bit: Dette repræsenterer tegnet på tallet. 0 repræsenterer positiv, mens 1 repræsenterer negativ. Forspændt eksponent: Eksponenten af tallet kan ikke lagres direkte, da den kan være både negativ eller positiv, så vi bruger en skæv eksponent, hvor vi tilføjer noget skævhed til eksponenten. Normaliseret Mantisse: Matissa er tallet i videnskabelig notation, dvs. præcisionsbits af tallet.
C float Hukommelsesrepræsentation
Størrelsen på flyderen er 32-bit, hvoraf:
- Den mest signifikante bit (MSB) bruges til at gemme skilt af nummeret.
- Den næste 8 bits bruges til at opbevare eksponent.
- Det resterende 23 bit bruges til at opbevare mantisse.
Eksempel
Lad os tage 65,125 som et decimaltal, som vi vil gemme i hukommelsen.
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 dobbelt Hukommelsesrepræsentation
Størrelsen på flyderen er 32-bit, hvoraf:
hvordan man afslører skjulte apps
- Den mest signifikante bit (MSB) bruges til at gemme skilt af nummeret.
- Den næste 11 bits bruges til at opbevare eksponent.
- Det resterende 52 bit bruges til at opbevare mantisse.
Eksempel
Lad os tage eksemplet med det samme 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>
Forskelle mellem float og double
Points | Flyde | Dobbelt |
|---|---|---|
| Præcision | Float er enkelt præcision IEEE 754 flydende komma, som giver præcision op til 7 decimaler. | Double er dobbelt præcision IEEE 754 flydende komma, der giver præcision op til 15 decimaler. |
| Hukommelsesbrug | Float bruger 32 bit eller 4 bytes hukommelse. | Dobbelt bruger 64 bit eller 8 bytes hukommelse. |
| Rækkevidde | Float kan gemme værdier, der varierer fra 3,4 x 10-38til 3,4 x 10+38. | Rækkevidden af dobbelt er 1,7×10-308til 1,7×10+308. |
| Formatspecifikation | %f er formatspecifikationen for float. | %lf er formatspecifikationen for dobbelt. |
| Hukommelsesrepræsentation | Tegn = 1 bit Eksponent = 8 bit Mantisse = 23 bit | Tegn = 1 bit Eksponent = 11 bit Mantisse = 52 bit |
Konklusion
Som konklusion bruger C både float og double til decimaltal, men de varierer med hensyn til præcision, hukommelsesforbrug, rækkevidde og hastighed. Når pladsen er begrænset, og præcisionen kan kompromitteres, er det bedre at bruge float der, mens dobbelt bruges til højpræcisionsapplikationer, hvor pladsen ikke er et problem. Det er vigtigt at vælge den relevante datatype baseret på kravene til applikationen.