Salta al contenuto
Note per Studenti Esercizio 7 · virgola mobile a 16 bit, codifica, decodifica e somma (temi d'esame luglio 2020, febbraio 2025 e settembre 2026)

Esercizio 7virgola mobile a 16 bit, codifica, decodifica e somma (temi d'esame luglio 2020, febbraio 2025 e settembre 2026)

Esame
In questa pagina 5

Testo (temi d'esame luglio 2020 problema 2; febbraio 2025 problema P1; settembre 2026 problema P8). Una unità aritmetica a virgola mobile a 16 bit ha: bit 15 = segno; bit 14-11 = esponente (4 bit, offset 7); bit 10-0 = mantissa (11 bit, con 11 implicito).

(a) Si deve eseguire 223,75+(−83,375)223{,}75+(-83{,}375), arrotondando le parti frazionarie quando necessario: rappresentazione del primo addendo, del secondo, del risultato ed errore. (b) Si determini il valore reale dei dati 0  1010  011001101010\;1010\;01100110101 (a), 1  1000  011001101011\;1000\;01100110101 (b), 0  1100  111000110000\;1100\;11100011000 (c) e la rappresentazione binaria della somma b+cb+c. (c) Si scriva la rappresentazione di n=−104,871n=-104{,}871 con arrotondamento della mantissa e si indichi l'errore assoluto.


Teoria usata: Virgola mobile - formato IEEE 754 e formato a 16 bitIn virgola mobile un numero è $(-1)^S,(1+F),2^{E-B}$: segno $S$, mantissa frazionaria $F$ (con l'$1$ iniziale implicito) ed esponente $E$ con offset $B$. La precisione relativa è costante ($\varepsilon=2^{-n_F}$) e cambia la spaziatura tra i valori; in $n$ bit si rappresentano gli stessi $2^n$ numeri della virgola fissa, ma distribuiti diversamente. Nello standard IEEE 754 a 32 bit: 1 bit di segno, 8 di esponente ($B=127$), 23 di mantissa. All'esame compare un formato a 16 bit (1+4+11, $B=7$): codifica, decodifica e somma con allineamento degli esponenti. Il campo esponente tutto a 0 con mantissa nulla è lo zero.Virgola mobile - formato IEEE 754 e formato a 16 bit →, 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 →.

Richiami

x=(−1)S(1+F) 2E−7x=(-1)^S(1+F)\,2^{E-7} con F=M/211F=M/2^{11} (MM = mantissa a 11 bit). La codifica: e=⌊log⁡2∣x∣⌋e=\lfloor\log_2|x|\rfloor, E=e+7E=e+7, M=round((∣x∣/2e−1) 211)M=\mathrm{round}\big((|x|/2^e-1)\,2^{11}\big). Gli esponenti validi sono E=1,…,14E=1,\dots,14 (0 e 15 sono riservati): 2−6≤∣x∣<282^{-6}\le|x|<2^8.

(a) 223,75+(−83,375)223{,}75+(-83{,}375)

  • 223,75=11011111,112=1,101111111⋅27223{,}75=11011111{,}11_2=1{,}101111111\cdot2^7: e=7e=7, E=14=1110E=14=1110; M=0,748046875⋅2048=1532=101111111002M=0{,}748046875\cdot2048=1532=10111111100_2. Parola: 0  1110  10111111100=0x75FC0\;1110\;10111111100=\texttt{0x75FC}. È esatto (la mantissa ha solo 9 cifre significative).
  • −83,375=−1010011,0112=−1,010011011⋅26-83{,}375=-1010011{,}011_2=-1{,}010011011\cdot2^6: e=6e=6, E=13=1101E=13=1101; M=0,302734375⋅2048=620=010011011002M=0{,}302734375\cdot2048=620=01001101100_2. Parola: 1  1101  01001101100=0xEA6C1\;1101\;01001101100=\texttt{0xEA6C}. Esatto.
  • Somma. Mantisse con 1 implicito, in unità 2−112^{-11} (cioè 2048+M2048+M): 223,75→2048+1532=3580223{,}75\to2048+1532=3580; 83,375→2048+620=266883{,}375\to2048+620=2668. Gli esponenti sono 7 e 6: si allinea il secondo spostando la sua mantissa a destra di 1 posto: 2668≫1=13342668\gg1=1334 (nessun bit perso: 2668 è pari). Segni opposti, quindi si sottrae: 3580−1334=22463580-1334=2246. Poiché 2048≤2246<40962048\le2246<4096 la mantissa è già normalizzata (tra 1 e 2) e l'esponente resta E=14E=14. M=2246−2048=198=000110001102M=2246-2048=198=00011000110_2. Risultato: 0  1110  00011000110=0x70C60\;1110\;00011000110=\texttt{0x70C6}, valore 22462048⋅128=140,375\frac{2246}{2048}\cdot128=140{,}375, esatto: errore nullo.

(b) Decodifica e somma

  • (a) 0  1010  011001101010\;1010\;01100110101: S=0S=0; E=10102=10⇒e=3E=1010_2=10\Rightarrow e=3; M=011001101012=821M=01100110101_2=821, F=0,4009F=0{,}4009: x=1,4009⋅8=11,207x=1{,}4009\cdot8=\mathbf{11{,}207}.
  • (b) 1  1000  011001101011\;1000\;01100110101: S=1S=1; E=10002=8⇒e=1E=1000_2=8\Rightarrow e=1; stessa mantissa: x=−1,4009⋅2=−2,802x=-1{,}4009\cdot2=\mathbf{-2{,}802}.
  • (c) 0  1100  111000110000\;1100\;11100011000: E=12⇒e=5E=12\Rightarrow e=5; M=111000110002=1816M=11100011000_2=1816, F=0,8867F=0{,}8867: x=1,8867⋅32=60,375x=1{,}8867\cdot32=\mathbf{60{,}375}.

Somma b+c=−2,8018+60,375=57,5732b+c=-2{,}8018+60{,}375=57{,}5732. Si allinea l'addendo con esponente minore (bb, e=1e=1) a quello di cc (e=5e=5): spostamento di 4 posti a destra. Mantisse con 1 implicito: bb: 2048+821=28692048+821=2869; cc: 2048+1816=38642048+1816=3864. 2869≫4=1792869\gg4=179 (si perdono i 4 bit bassi: 2869/16=179,32869/16=179{,}3: troncamento o arrotondamento danno lo stesso 179). Segni opposti: 3864−179=3685=11100110010123864-179=3685=111001100101_2, in [2048,4096)[2048,4096) quindi già normalizzato; esponente E=12E=12. M=3685−2048=1637=110011001012M=3685-2048=1637=11001100101_2. Risultato: 0  1100  110011001010\;1100\;11001100101, cioè 36852048⋅32=57,578\frac{3685}{2048}\cdot32=57{,}578 (il valore esatto è 57,573257{,}5732: errore 4,9⋅10−34{,}9\cdot10^{-3}, dovuto ai bit persi nell'allineamento).

(c) n=−104,871n=-104{,}871

S=1S=1. ∣n∣=104,871=1,638609⋅26|n|=104{,}871=1{,}638609\cdot2^6 (64⋅1,6386=104,87164\cdot1{,}6386=104{,}871): e=6e=6, E=13=1101E=13=1101. M=round((1,638609−1)⋅2048)=round(1307,9)=1308=101000111002M=\mathrm{round}\big((1{,}638609-1)\cdot2048\big)=\mathrm{round}(1307{,}9)=1308=10100011100_2. Parola: 1  1101  10100011100=0xED1C1\;1101\;10100011100=\texttt{0xED1C}. Valore rappresentato: −(1+1308/2048)⋅64=−104,875-(1+1308/2048)\cdot64=-104{,}875; errore assoluto ∣ε∣=4⋅10−3|\varepsilon|=\mathbf{4\cdot10^{-3}} (precisamente 0,0040{,}004).

Errori comuni

  • Dimenticare l'11 implicito nella decodifica e nelle somme tra mantisse.
  • Usare l'esponente come numero senza sottrarre l'offset (7).
  • Sommare le mantisse prima di avere uguagliato gli esponenti.
  • Non verificare la normalizzazione dopo la somma (mantissa ≥2\ge2 → shift a destra e E+1E+1; mantissa <1<1 → shift a sinistra e E−1E-1).

Versione ripasso

Testo. Virgola mobile 16 bit (1+4+111+4+11, offset 7): 223,75−83,375223{,}75-83{,}375; decodifica di tre parole e somma; codifica di −104,871-104{,}871 (luglio 2020, febbraio 2025, settembre 2026).

Teoria collegata