logo

C Float e Double

Galleggiante E Doppio sono due tipi di dati primitivi nella programmazione C utilizzati per archiviare valori decimali . Entrambi memorizzano numeri in virgola mobile ma differiscono nel livello di precisione con cui possono memorizzare i valori.

In questo articolo studieremo ciascuno di essi in dettaglio, la loro rappresentazione della memoria e la differenza tra loro.



Galleggiante

Float viene utilizzato per memorizzare numeri in virgola mobile a precisione singola. Può memorizzare valori decimali con precisione fino a 6-7 cifre decimali.

Sintassi

 float var_name ;>
  • La dimensione del galleggiante è 4 byte.
  • Float può memorizzare valori che variano da 3,4×10-38a 3,4x 1038.
  • Può memorizzare valori fino a 7 punti decimali senza perdita di precisione.
  • L'identificatore di formato per float è %F.

Esempio

C




eccezione personalizzata in 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;> }>

la classe astratta può avere un costruttore
>

>

Produzione

Float value is 789.123474>

Come puoi vedere nell'output sopra, la precisione dei numeri decimali viene persa dopo la settima cifra a causa dei bit limitati in virgola mobile. In questi casi si consiglia un tipo di dati doppio.

Nota: Tutti i valori letterali dei numeri reali sono di tipo double per impostazione predefinita. Possiamo aggiungere un F alla fine del letterale per definirlo come tipo float.

Java pubblico o privato

Doppio

Double viene utilizzato per memorizzare valori in virgola mobile a doppia precisione. È la versione più avanzata di float che può memorizzare numeri reali con precisione fino a 15 cifre decimali.

  • La dimensione del doppio è 8 byte.
  • La gamma del doppio è 1,7×10-308a 1,7×10+308.
  • Può memorizzare valori fino a 15 punti decimali senza perdita di precisione.
  • L'identificatore di formato per double è %lf

Esempio

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

>

>

albero di ricerca binario
Produzione

Double value is 789.123456>

Come vengono memorizzati float e double?

Il linguaggio C segue il Norma IEEE 754 per rappresentare valori in virgola mobile nella memoria. A differenza del tipo int che viene archiviato direttamente in memoria in forma binaria, i valori float vengono divisi in due parti: esponente e mantissa, e quindi archiviati.

Secondo IEEE 754 i valori in virgola mobile sono costituiti da 3 componenti:

gimp come deselezionare
    Bit di segno: rappresenta il segno del numero. 0 rappresenta il positivo mentre 1 rappresenta il negativo. Esponente distorto: l'esponente del numero non può essere memorizzato direttamente poiché può essere sia negativo che positivo, quindi utilizziamo un esponente distorto in cui aggiungiamo una certa distorsione all'esponente. Mantissa normalizzata: Matissa è il numero in notazione scientifica, cioè i bit di precisione del numero.

Rappresentazione della memoria in C float

La dimensione del float è 32 bit, di cui:

    Il bit più significativo (MSB) viene utilizzato per memorizzare il file cartello del numero.
  • Il prossimo 8 bit vengono utilizzati per memorizzare i esponente.
  • Il resto 23 bit vengono utilizzati per memorizzare i mantissa.
rappresentazione in memoria di float

Esempio

Prendiamo 65.125 come numero decimale che vogliamo archiviare in memoria.

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 doppia rappresentazione della memoria

La dimensione del float è 32 bit, di cui:

    Il bit più significativo (MSB) viene utilizzato per memorizzare il file cartello del numero.
  • Il prossimo 11 bit vengono utilizzati per memorizzare i esponente.
  • Il resto 52 bit vengono utilizzati per memorizzare i mantissa.
Rappresentazione mnemonica del doppio

Esempio

Prendiamo l'esempio dello stesso numero 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>

Differenze tra float e double

Punti

Galleggiante

Doppio

Precisione Float è un valore in virgola mobile IEEE 754 a precisione singola che fornisce precisione fino a 7 punti decimali. Double è un valore in virgola mobile IEEE 754 a doppia precisione che fornisce precisione fino a 15 punti decimali.
Utilizzo della memoria Float utilizza 32 bit o 4 byte di memoria. Double utilizza 64 bit o 8 byte di memoria.
Allineare Float può memorizzare valori che variano da 3,4 x 10-38a 3,4×10+38. L'intervallo del doppio è 1,7×10-308a 1,7×10+308.
Identificatore di formato %F è l'identificatore di formato per float. %lf è l'identificatore di formato per double.
Rappresentazione della memoria Segno = 1 bit
Esponente = 8 bit
Mantissa = 23 bit
Segno = 1 bit
Esponente = 11 bit
Mantissa = 52 bit

Conclusione

In conclusione, C utilizza sia float che double per i numeri decimali, ma variano in termini di precisione, utilizzo della memoria, intervallo e velocità. Quando lo spazio è limitato e la precisione può essere compromessa, è meglio utilizzare float, mentre double viene utilizzato per applicazioni ad alta precisione in cui lo spazio non è un problema. È essenziale scegliere il tipo di dati appropriato in base ai requisiti dell'applicazione.