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