Salta al contenuto
Note per Studenti Esercizio 1 · da reale a esadecimale con formato ottimo, errore e bit minimi (temi d'esame febbraio 2023, gennaio 2022 e settembre 2026)

Esercizio 1da reale a esadecimale con formato ottimo, errore e bit minimi (temi d'esame febbraio 2023, gennaio 2022 e settembre 2026)

Esame
In questa pagina 7

Testo (tema d'esame febbraio 2023, problema 1; gennaio 2022, problema P1.1; settembre 2026, problema 1). Si convertano in valori esadecimali a 16 bit i seguenti numeri frazionari, applicando l'arrotondamento e normalizzando nel modo più conveniente, cioè minimizzando l'errore introdotto; si indichino il formato scelto e l'errore assoluto (con segno ++ se in eccesso).

(a) +811+\frac8{11}, −811-\frac8{11}, −123,34-123{,}34, +1,625+1{,}625; (b) +43+\frac43, −43-\frac43, +8,625+8{,}625, −1,75-1{,}75; (c) 149\frac{14}9, −0,1357-0{,}1357, +3,275+3{,}275, −9,922-9{,}922 (4° appello, settembre 2026). (d) Quanti bit totali servono per rappresentare 13\frac13, 23,5723{,}57, −31,125-31{,}125 con errore minore di 50 ppm (febbraio 2026)? (e) Rappresentare in complemento a 2 e formato Q7 (8 bit) −0,567-0{,}567 e 0,1230{,}123 con troncamento, indicando l'errore (tema d'esame del 2004).


Teoria usata: Rappresentare un valore reale in virgola fissa - formato ottimo ed errorePer rappresentare un reale $x$ su $W$ bit a virgola fissa si sceglie il formato che minimizza l'erroresceglie la rappresentazione per cui la differenza tra il valore rappresentato e quello vero è la più piccola possibile: il maggior numero di bit frazionari $m$ compatibile con l'intervallo ($n=W-m$ bit interi, con U se $x\ge0$, con S se $x<0$). Poi $C=\mathrm{round}(x\cdot2^m)$, scritto in esadecimale (per un negativo, in complemento a 2), e l'errore $\varepsilon=\frac{C}{2^m}-x$, positivo se in eccesso, ha modulo $\le2^{-(m+1)}$. Se invece è dato l'errore massimo, i bit minimi si ricavano da $2^{-(m+1)}\le\varepsilon_{max}$.Rappresentare un valore reale in virgola fissa - formato ottimo ed errore →, 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 →.

Il metodo

Per ogni numero xx: (1) U se x≥0x\ge0, S se x<0x<0; (2) nn = minimo numero di bit interi che contiene xx (per S il segno è compreso); (3) m=16−nm=16-n; (4) C=round(x⋅2m)C=\mathrm{round}(x\cdot2^m), con C+216C+2^{16} se negativo; (5) ε=C/2m−x\varepsilon=C/2^m-x.

(a)

xx formato calcolo di CC codice ε\varepsilon
+0,72727+0{,}72727 0.16 U round(47662,5)=47663\mathrm{round}(47662{,}5)=47663 0xBA2F\texttt{0xBA2F} +6,9⋅10−6+6{,}9\cdot10^{-6}
−0,72727-0{,}72727 1.15 S round(−23831,3)=−23831→65536−23831=41705\mathrm{round}(-23831{,}3)=-23831\to65536-23831=41705 0xA2E9\texttt{0xA2E9} +8,3⋅10−6+8{,}3\cdot10^{-6}
−123,34-123{,}34 8.8 S −123,34⋅256=−31575,04→−31575→33961-123{,}34\cdot256=-31575{,}04\to-31575\to33961 0x84A9\texttt{0x84A9} +1,56⋅10−4+1{,}56\cdot10^{-4}
+1,625+1{,}625 1.15 U 1,625⋅32768=532481{,}625\cdot32768=53248 0xD000\texttt{0xD000} 00

Per +811+\frac8{11} il numero è minore di 1 e positivo, quindi tutti i 16 bit sono frazionari (0.16 U); per −811-\frac8{11} serve il bit di segno e restano 15 frazionari. Per −123,34-123{,}34: 27=128>123,342^7=128>123{,}34, quindi servono 8 bit interi con il segno (8.8 S). 1,625=1381{,}625=\frac{13}8 è esatto.

(b)

+43=1,3333+\frac43=1{,}3333: 1.15 U, C=round(1,3333⋅32768)=43691=0xAAABC=\mathrm{round}(1{,}3333\cdot32768)=43691=\texttt{0xAAAB}, ε=+1,0⋅10−5\varepsilon=+1{,}0\cdot10^{-5}. −43-\frac43: tra −1-1 e −2-2, serve 2.14 S ([−2,2)[-2,2)), C=round(−21845,3)=−21845→43691=0xAAABC=\mathrm{round}(-21845{,}3)=-21845\to43691=\texttt{0xAAAB} (stesso codice del positivo: letto come 2.14 S vale −1,3333-1{,}3333), ε=+2,0⋅10−5\varepsilon=+2{,}0\cdot10^{-5}. +8,625+8{,}625: 8,625<168{,}625<16: 4.12 U, C=8,625⋅4096=35328=0x8A00C=8{,}625\cdot4096=35328=\texttt{0x8A00}, ε=0\varepsilon=0. −1,75-1{,}75: 2.14 S, C=−1,75⋅16384=−28672→36864=0x9000C=-1{,}75\cdot16384=-28672\to36864=\texttt{0x9000}, ε=0\varepsilon=0.

(c)

  • 149=1,5556\frac{14}9=1{,}5556: 1.15 U, C=round(50972,4)=50972=0xC71CC=\mathrm{round}(50972{,}4)=50972=\texttt{0xC71C}, ε=−1,36⋅10−5\varepsilon=-1{,}36\cdot10^{-5}.
  • −0,1357-0{,}1357: 1.15 S, C=round(−4446,6)=−4447→61089=0xEEA1C=\mathrm{round}(-4446{,}6)=-4447\to61089=\texttt{0xEEA1}, ε=−1,17⋅10−5\varepsilon=-1{,}17\cdot10^{-5}.
  • +3,275+3{,}275: 2.14 U (3,275<43{,}275<4), C=round(53657,6)=53658=0xD19AC=\mathrm{round}(53657{,}6)=53658=\texttt{0xD19A}, ε=+2,44⋅10−5\varepsilon=+2{,}44\cdot10^{-5}.
  • −9,922-9{,}922: ∣x∣<16|x|<16 quindi serve n−1=4n-1=4 bit di modulo più il segno: 5.11 S, C=round(−20320,3)=−20320→45216=0xB0A0C=\mathrm{round}(-20320{,}3)=-20320\to45216=\texttt{0xB0A0}, ε=+1,25⋅10−4\varepsilon=+1{,}25\cdot10^{-4}.

(d) Bit minimi per ε<5⋅10−5\varepsilon<5\cdot10^{-5}

  • 13\frac13 (U, n=0n=0): con m=12m=12: C=1365C=1365, ε=8,1⋅10−5\varepsilon=8{,}1\cdot10^{-5} (troppo); con m=13m=13: C=2731C=2731, ε=4,1⋅10−5\varepsilon=4{,}1\cdot10^{-5} ✓. 13 bit (0.13 U).
  • 23,5723{,}57 (U, n=5n=5): m=13m=13: C=193085C=193085, ε=−5,4⋅10−5\varepsilon=-5{,}4\cdot10^{-5} (troppo); m=14m=14: C=386171C=386171, ε=+7,3⋅10−6\varepsilon=+7{,}3\cdot10^{-6} ✓. 5+14=195+14=19 bit.
  • −31,125=−2498-31{,}125=-\frac{249}8: esatto con m=3m=3; per S serve l'intervallo [−32,32)[-32,32), n=6n=6: 6+3=96+3=9 bit, errore nullo.

(e) Q7 con troncamento

Q7 = 1.7 S: C=trunc(x⋅128)C=\mathrm{trunc}(x\cdot128) (troncamento del modulo).

  • −0,567⋅128=−72,576→−72=101110002=0xB8-0{,}567\cdot128=-72{,}576\to-72=10111000_2=\texttt{0xB8}; valore rappresentato −72/128=−0,5625-72/128=-0{,}5625; ε=+0,0045\varepsilon=+0{,}0045.
  • 0,123⋅128=15,74→15=000011112=0x0F0{,}123\cdot128=15{,}74\to15=00001111_2=\texttt{0x0F}; rappresentato 0,11720{,}1172; ε=−5,8⋅10−3\varepsilon=-5{,}8\cdot10^{-3}. Con arrotondamento si avrebbe −73-73 (ε=−0,0033\varepsilon=-0{,}0033) e 1616 (ε=+0,0020\varepsilon=+0{,}0020): l'errore massimo di troncamento è 2−7=0,00782^{-7}=0{,}0078, doppio di quello di arrotondamento (0,00390{,}0039).

Errori comuni

  • Usare S per un numero positivo e perdere un bit di precisione (+811+\frac8{11} in 1.15 S invece di 0.16 U).
  • Scegliere nn senza controllare che il numero entri nell'intervallo (per esempio −4/3-4/3 in 1.15 S non entra).
  • Scrivere il modulo di un negativo senza il complemento a 2.
  • Dimenticare di verificare la soglia: per (d) la formula m≥log⁡212εm\ge\log_2\frac1{2\varepsilon} non basta.

Versione ripasso

Testo. Convertire in esadecimale a 16 bit con formato ottimo, errore con segno e bit minimi per 50 ppm (febbraio 2023, gennaio 2022, settembre 2026).

Teoria collegata