Numeri in virgola mobile
Perché sono necessari numeri in virgola mobile
Poiché la memoria del computer è limitata, non è possibile memorizzare i numeri con precisione infinita, indipendentemente dal fatto che si utilizzino frazioni binarie o decimali: ad un certo punto è necessario tagliare. Ma quanta precisione è necessaria? E dove è necessario? Quante cifre intere e quante cifre di frazione?
- Per un ingegnere che costruisce un’autostrada, non importa se si tratta di 10 metri o 10.0001 metri di larghezza-le loro misure probabilmente non sono così accurate in primo luogo.
- Per qualcuno che progetta un microchip, 0,0001 metri (un decimo di millimetro) è una differenza enorme, ma non dovranno mai affrontare una distanza maggiore di 0,1 metri.
- Un fisico deve utilizzare la velocità della luce (circa 300000000) e la costante gravitazionale di Newton (circa 0,0000000000667) insieme nello stesso calcolo.
Per soddisfare l’ingegnere e il progettista di chip, un formato numerico deve fornire precisione per i numeri a grandezze molto diverse. Tuttavia, è necessaria solo una precisione relativa. Per soddisfare il fisico, deve essere possibile fare calcoli che coinvolgono numeri con diverse grandezze.
Fondamentalmente, avere un numero fisso di cifre intere e frazionarie non è utile – e la soluzione è un formato con una virgola mobile.
Come funzionano i numeri in virgola mobile
L’idea è di comporre un numero di due parti principali:
- Un significato che contiene le cifre del numero. I significandi negativi rappresentano numeri negativi.
- Un esponente che dice dove il punto decimale (o binario) è posizionato rispetto all’inizio del significand. Gli esponenti negativi rappresentano numeri molto piccoli (cioè vicini allo zero).
Tale formato soddisfa tutti i requisiti:
- Può rappresentare numeri a grandezze molto diverse (limitate dalla lunghezza dell’esponente)
- Fornisce la stessa precisione relativa a tutte le grandezze (limitate dalla lunghezza del significand)
- Consente calcoli su magnitudini: moltiplicando un numero molto grande e un numero molto piccolo preserva la precisione di entrambi nel risultato.
I numeri decimali in virgola mobile di solito assumono la forma di notazione scientifica con un punto esplicito sempre tra la 1a e la 2a cifra. L’esponente è scritto esplicitamente includendo la base, o una e è usata per separarlo dal significato.
Lo standard
Quasi tutti i linguaggi hardware e di programmazione utilizzano numeri in virgola mobile negli stessi formati binari, definiti nello standard IEEE 754. I formati usuali sono 32 o 64 bit di lunghezza totale:
Format | Total bits | Significand bits | Exponent bits | Smallest number | Largest number |
---|---|---|---|---|---|
Single precision | 32 | 23 + 1 sign | 8 | ca. 1.2 ⋅ 10-38 | ca. 3.4 ⋅ 1038 |
Double precision | 64 | 52 + 1 sign | 11 | ca. 2.2 ⋅ 10-308 | ca. 1.8 1 10308 |
Si noti che ci sono alcune peculiarità:
- La sequenza di bit effettiva è il bit di segno prima, seguito dall’esponente e infine i bit di significato.
- L’esponente non ha un segno; invece un bias esponente viene sottratto da esso (127 per singolo e 1023 per doppia precisione). Questo, e la sequenza di bit, consente di confrontare e ordinare correttamente i numeri in virgola mobile anche quando li interpretano come numeri interi.
- La cifra più significativa del significand viene omessa e assunta come 1, ad eccezione dei numeri subnormali che sono contrassegnati da un esponente all-0 e consentono un intervallo di numeri oltre i numeri più piccoli indicati nella tabella sopra, a costo di precisione.
- Ci sono valori zero positivi e negativi separati, che differiscono nel bit del segno, dove tutti gli altri bit sono 0. Questi devono essere considerati uguali anche se i loro modelli di bit sono diversi.
- Ci sono speciali valori di infinito positivo e negativo, dove l’esponente è tutto 1-bit e il significato è tutto 0-bit. Questi sono i risultati dei calcoli in cui viene superato l’intervallo positivo dell’esponente o la divisione di un numero regolare per zero.
- Ci sono valori speciali non numerici (o NaN) in cui l’esponente è tutto a 1 bit e il significato non è tutto a 0 bit. Questi rappresentano il risultato di vari calcoli indefiniti (come moltiplicare 0 e infinito, qualsiasi calcolo che coinvolge un valore NaN o casi specifici dell’applicazione). Anche i valori NAN bit-identici non devono essere considerati uguali.
Se questo sembra troppo astratto e vuoi vedere come appaiono alcuni valori specifici in IEE 754, prova il Float Toy o la visualizzazione IEEE 754 o Float Exposed.
Leave a Reply