Virgola mobile - formato IEEE 754 e formato a 16 bit
In questa pagina 5
L'aritmetica a virgola fissa (Virgola fissa - formati n.m e normalizzazioneIn virgola fissa il processore fa aritmetica sugli interi (con segno) e il fattore di scalacostante per cui si moltiplica un valore reale per ottenere l'intero memorizzato $2^{m}$ resta sottinteso: il formato n.m dice che dei bit disponibili $n$ sono la parte intera (compreso il segno se il numero è con segno, S; nessun segno se U) e $m$ la parte frazionaria. Il valore è $\text{codice}/2^m$. Passare dal formato n.m al decimale, o viceversa, è il calcolo più frequente dell'esame: su 16 bit $\text{valore}=\text{codice}/2^m$, l'intervallo è $[0,2^n)$ (U) oppure $[-2^{n-1},2^{n-1})$ (S), la risoluzione è $2^{-m}$.Virgola fissa - formati n.m e normalizzazione →) tiene la virgola in una posizione stabilita una volta per tutte. Questo può compromettere l'accuratezzaquanto il valore rappresentato è vicino a quello vero: un esempio tipico è con e , quasi uguali. Il risultato di ha una sola cifra significativa e quindi l'accuratezza del quoziente è bassissima (cosa succede con ?). Alcuni DSP, e pochissimi µC, usano allora la virgola mobile (floating point).
Precisione e accuratezza non sono la stessa cosa. La precisionenumero di cifre significative usate per rappresentare un numero è il numero di cifre significative usate; l'accuratezza misura quanto il valore rappresentato è vicino al vero. è meno preciso di ma è più accurato.
La rappresentazione
Si usa la notazione scientifica normalizzatascrittura di un numero come una mantissa tra 1 e 2 per una potenza della base in base 2: . La parte è la mantissa, l'esponente. Lo standard IEEE 754standard internazionale adottato da tutti i processori recenti per la virgola mobile scrive dove è il bit di segno, la parte frazionaria della mantissa (l' a sinistra della virgola è implicito, non si memorizza), il campo esponentela potenza di 2 per cui si moltiplica la mantissa (un intero senza segno) e l'offsetcostante sottratta al campo esponente per ottenere l'esponente vero, così gli esponenti negativi si scrivono con un campo non negativo (bias). La parola ha tre campi: .
Singola precisione (32 bit): : 1 bit; : 8 bit (valori , offset ); : 23 bit. Esistono anche la doppia (64 bit) e la quadrupla (128 bit) precisione. Intervallo dei positivi: .
Per ogni valore dell'esponente i valori possibili della mantissala parte del numero che contiene le cifre significative sono "solo" ; poiché gli esponenti sono , i positivi rappresentabili sono in totale : tanti quanti quelli rappresentabili in virgola fissa su 32 bit. Cambia solo la spaziaturadistanza tra due numeri rappresentabili consecutivi: non è costante ma cresce con l'esponente. La distanza relativa tra due numeri consecutivi, rapportata a , è invece costante e vale (precisione di macchinadistanza relativa minima tra due numeri rappresentabili: 2 elevato a meno il numero di bit della mantissa, numero di bit della mantissa).
Valori riservati: il campo esponente tutto a 0 (valore dopo l'offset) serve a codificare lo zero, che non si potrebbe rappresentare con una mantissa nulla a causa dell' implicito; lo zerovalore 0: ha una codifica propria perché la mantissa implicita parte da 1 è quindi una parola priva di uni. Il campo esponente tutto a 1 serve per gli overflowvalore troppo grande per essere rappresentato e i valori non numerici (NaNNot a Number: codice che indica un risultato non rappresentabile o non definito).
Il formato a 16 bit dell'esame
Nelle prove di Elettronica Industriale si usa una ALU a virgola mobilerappresentazione in cui la posizione della virgola cambia con un esponente a 16 bit con: bit 15 = segno ; bit 14-11 = esponente (4 bit, offset ); bit 10-0 = mantissa (11 bit, implicito). Gli esponenti validi sono , cioè , quindi il massimo valore è circa .
Decodifica
Esempio: . ; , esponente ; . Valore: . Con , (esponente ) e la stessa mantissa: . Con : (esponente 5), : .
Codifica
- Il segno: bit .
- Normalizzazione: scrivere con .
- Campo esponente .
- Mantissa: (11 bit; con arrotondamento, o con troncamentoeliminazione dei bit bassi senza arrotondare se richiesto).
- Errore: .
Esempio : , , ; . Parola: . Valore rappresentato ; errore . Per con troncamento della mantissa: (cioè ), valore , errore .
Gli interi e le frazioni con pochi bit significativi sono rappresentati esattamente: (: ) e (: ) non hanno errore.
Somma in virgola mobile
L'operazione richiede (1) identificare l'addendo con l'esponente minore; (2) allinearlo spostando a destra la sua mantissa fino a rendere uguali gli esponenti (nello shift si perdono i bit bassi: troncamento); (3) sommare (o sottrarre) le mantisse; (4) normalizzareriportare la mantissa tra 1 e 2 correggendo l'esponente il risultato (mantissa tra 1 e 2) correggendo l'esponente.
Esempio (formato a 16 bit con 5 bit di esponente, , 10 di mantissa). . (, esponente ); come addendo negativo (esponente , ). Gli esponenti differiscono di 2: la mantissa del secondo (con 1 implicito: ) si sposta di 2 posti a destra: (si perdono i due bit bassi: troncamento!). Mantisse con 1 implicito: . Il risultato è già normalizzato per l'esponente 7: . Il valore esatto è : errore , dovuto ai bit persi nell'allineamento.
Nell'esempio d'esame : i due operandi sono esatti, e si allineano (esponenti 7 e 6) senza perdere bit: risultato (), errore nullo.
Quando conviene la virgola mobile
I circuiti sono molto più complessi di quelli per la virgola fissa (due ALU, due shifter, circuito per gli esponenti, arrotondamento), ma i µC/DSP in virgola mobile mantengono comunque anche la sezione a virgola fissa, che costa poco. Alcuni µC hanno un'unità aritmetica ausiliaria a virgola mobile in singola precisione (ARM Cortex-M4). I DSP per il controllo real time sono ancora tutti a virgola fissa; per il signal processing prevale la virgola mobile. Nei numeri a virgola mobile il segno è un bit separato dalla mantissa (codifica in modulo e segno), non il complemento a 2.
Errori comuni
- Dimenticare l' implicito (decodificando invece di ).
- Dimenticare l'offset: vale esponente , non .
- Sommare le mantisse prima di avere uguagliato gli esponenti.
- Confondere precisione (cifre significative) e accuratezza (vicinanza al valore vero).
Versione ripasso
- Valore: ; implicito; singola precisione bit, , range ; ; stessi valori della virgola fissa ma spaziatura variabile.
- Riservati: esponente tutto 0 (e ) = zero; tutto 1 = NaN/overflow.
- 16 bit d'esame: (bit 15), (bit 14-11, ), (bit 10-0). Decodifica: ; . Codifica: , , ; (, errore ).
- Somma: esponente minore allineato (shift a destra, troncamento), somma delle mantisse, normalizzazione; (errore ); esatto.
- Errori: implicito, offset, mantisse sommate prima dell'allineamento, precisione≠accuratezza (Numeri binari e complemento a dueI processori lavorano con un numero fisso di bit $n$. I naturali vanno da $0$ a $2^n-1$; per i negativi si usa il complemento a due: $C_2(N)=2^n-N=\overline N+1$ (si invertono tutti i bit e si somma 1). Con $n$ bit rappresenta $-2^{n-1}\le N\le2^{n-1}-1$, ha un solo zero e unifica somma e sottrazione. Quando il risultato esce dall'intervallo c'è overflow; gli overflow intermedi si compensano se il risultato finale è rappresentabile. La lunghezza di parola non è l'accuratezza.Numeri binari e complemento a due →).