logo

C Float i Doble

Flota i doble són dos tipus de dades primitius en programació C que s'utilitzen per emmagatzemar valors decimals . Tots dos emmagatzemen nombres de coma flotant, però es diferencien pel nivell de precisió al qual poden emmagatzemar els valors.

En aquest article, estudiarem cadascun d'ells amb detall, la seva representació de memòria i la diferència entre ells.



Flota

Float s'utilitza per emmagatzemar números de coma flotant de precisió única. Pot emmagatzemar valors decimals amb precisió fins a 6-7 decimals.

Sintaxi

 float var_name ;>
  • La mida del flotador és 4 bytes.
  • Float pot emmagatzemar valors diferents de 3,4 x 10-38fins a 3,4 x 1038.
  • Pot emmagatzemar valors fins a 7 decimals sense pèrdua de precisió.
  • L'especificador de format per a float és %f.

Exemple

C




mylivecriclet





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

inkscape vs gimp
>

>

Sortida

Float value is 789.123474>

Com podeu veure a la sortida anterior, la precisió dels nombres decimals es perd després del setè dígit a causa dels bits limitats en flotació. En aquests casos, es recomana un tipus de dades doble.

Nota: Tots els literals de nombres reals són de tipus doble per defecte. Podem afegir un f al final del literal per definir-lo com a tipus flotant.

git superi

Doble

Double s'utilitza per emmagatzemar valors de coma flotant de precisió doble. És la versió més gran de float que pot emmagatzemar nombres reals amb precisió fins a 15 decimals.

  • La mida del doble és 8 bytes.
  • El rang de doble és 1.7×10-308fins a 1,7×10+308.
  • Pot emmagatzemar valors fins a 15 decimals sense pèrdua de precisió.
  • L'especificador de format per a double és %lf

Exemple

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

>

>

L'actriu Rubina Dilaik
Sortida

Double value is 789.123456>

Com s'emmagatzemen float i double?

El llenguatge C segueix el Estàndard IEEE 754 per representar valors de coma flotant a la memòria. A diferència del tipus int que s'emmagatzema directament a la memòria en forma binària, els valors flotants es divideixen en dues parts: exponent i mantissa, i després s'emmagatzemen.

Segons IEEE 754, els valors de coma flotant consten de 3 components:

en ordre
    Bit de signe: representa el signe del número. 0 representa positiu mentre que 1 representa negatiu. Exponent esbiaixat: l'exponent del nombre no es pot emmagatzemar directament, ja que pot ser tant negatiu com positiu, de manera que fem servir un exponent esbiaixat on afegim una mica de biaix a l'exponent. Mantissa normalitzada: Matissa és el nombre en notació científica, és a dir, bits de precisió del nombre.

C flotant Representació de memòria

La mida del flotador és de 32 bits, dels quals:

    El bit més significatiu (MSB) s'utilitza per emmagatzemar signe del nombre.
  • El següent 8 bits s'utilitzen per emmagatzemar exponent.
  • La resta 23 bits s'utilitzen per emmagatzemar mantissa.
representació de memòria del flotador

Exemple

Prenem 65,125 com a nombre decimal que volem emmagatzemar a la memòria.

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 doble representació de memòria

La mida del flotador és de 32 bits, dels quals:

    El bit més significatiu (MSB) s'utilitza per emmagatzemar signe del nombre.
  • El següent 11 bits s'utilitzen per emmagatzemar exponent.
  • La resta 52 bits s'utilitzen per emmagatzemar mantissa.
representació de memòria del doble

Exemple

Prenguem l'exemple del mateix nombre 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>

Diferències entre flotador i doble

Punts

Flota

Doble

Precisió Float és un punt flotant IEEE 754 de precisió única que proporciona una precisió de fins a 7 punts decimals. Double és un punt flotant IEEE 754 de doble precisió que proporciona una precisió de fins a 15 decimals.
Ús de la memòria Float utilitza 32 bits o 4 bytes de memòria. Double utilitza 64 bits o 8 bytes de memòria.
Interval Float pot emmagatzemar valors que varien des de 3,4 x 10-38fins a 3,4 x 10+38. El rang de doble és 1,7 × 10-308fins a 1,7×10+308.
Especificador de format %f és l'especificador de format per a float. %lf és l'especificador de format per a double.
Representació de la memòria Signe = 1 bit
Exponent = 8 bits
Mantissa = 23 bits
Signe = 1 bit
Exponent = 11 bits
Mantissa = 52 bits

Conclusió

En conclusió, C utilitza float i double per als nombres decimals, però varien en termes de precisió, ús de memòria, rang i velocitat. Quan l'espai és limitat i la precisió es pot comprometre, és millor utilitzar el flotador allà, mentre que el doble s'utilitza per a aplicacions d'alta precisió on l'espai no és un problema. És essencial triar el tipus de dades adequat en funció dels requisits de l'aplicació.