Esercizio 6divisione con una ALU a 8 bit, fattore di scala e serie (temi d'esame gennaio 2021, gennaio 2022, dicembre 2020 e luglio 2026)
In questa pagina 4
Testo (temi d'esame gennaio 2021 problema P1.4, gennaio 2022 P1.4, esercizi del 4 dicembre 2020 problema 3, luglio 2026 problema 1).
(a) Si vuole eseguire la divisione in una ALU a 8 bit. Si determini il fattore di scala più conveniente per cui premoltiplicare il dividendo, in modo da avere la migliore accuratezza del risultato, e l'errore relativo che si ottiene una volta riportato il quoziente sulla scala originale. Stessa richiesta per .
(b) Una ALU a 8 bit esegue la divisione . Dare la rappresentazione in complemento a 2 su 8 bit del quoziente e del resto, e il massimo e il minimo valore assoluto che può assumere il divisore.
(c) Si vuole calcolare con , con l'algoritmo con . Determinare: il valore reale di ; il valore di che garantisce un'accuratezza superiore a quella offerta da una rappresentazione di a 16 bit; la rappresentazione del risultato su 16 bit nel formato più conveniente; l'errore assoluto commesso.
Teoria usata: Moltiplicatori veloci e divisionePer il controllo real-time serve un moltiplicatore a ciclo singolo: a look-up table (la tabella cresce come $2^{2n}\cdot2n$ bit, quindi si fa solo a pochi bit e si compongono prodotti da 4 bit: $A\cdot B=A_HB_H,2^{8}+(A_HB_L+A_LB_H)2^4+A_LB_L$) oppure a matrice (schiera di AND e sommatori, ritardo $\sim2n$; varianti a somma per colonne e di Wallace). La divisione hardware si fa con sottrazioni successive (con ripristino) su valori positivi e il segno alla fine ($D=Q,d+R$); con $n$ bit ci sono vincoli su dividendo e divisore. Senza divisore hardware: $Q=N/D$ con la serie $\frac{N(1+Z)(1+Z^2)\cdots}{1-Z^{2^n}}$, $D=1-Z$, $0{,}5<D<1$.Moltiplicatori veloci e divisione →, 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 →.
(a) Fattore di scala
Con una ALU a bit con segno, quoziente e resto sono nell'intervallo (il segno si tratta alla fine). Dividere due interi dà un quoziente troncato: resto 9, errore relativo . Per recuperare accuratezza si premoltiplica il dividendo per : è il quoziente nella scala (il valore vero è ); l'errore di troncamento diventa volte più piccolo. La condizione è che (altrimenti la divisione "non è permessa").
| dividendo | quoziente | errore relativo | ||
|---|---|---|---|---|
| 0 | 63 | 2 | 2 | |
| 2 | 252 | 9 | 2,25 | |
| 4 | 1008 | 37 | 2,3125 | |
| 5 | 2016 | 74 (resto 18) | 2,3125 | |
| 6 | 4032 | 149 | non ammesso () | — |
Il fattore di scala più conveniente è il massimo che rispetta : , con quoziente e valore riportato in scala ; il valore vero è : errore relativo (per difetto, perché il quoziente è troncato). Il fattore 16 dà lo stesso valore: conviene 32 perché è il limite superiore (il prossimo, 64, dà 149).
(). : dividendo , resto 12 ( ✓); : ✗. Fattore di scala ; valore ; errore relativo .
(b)
Il segno si gestisce alla fine, sui moduli: resto , perché e . Il quoziente è negativo (segni discordi): ; il resto ha il segno del dividendo (positivo): . Deve valere ✓.
- Quoziente in complemento a 2 su 8 bit: .
- Resto .
- Divisore massimo in modulo: (limite dei numeri con segno a 8 bit): resto 15 ✓.
- Divisore minimo in modulo: il quoziente non può superare 127: , cioè , quindi (con 17: quoziente 127 resto 15; con 16 sarebbe 135, non rappresentabile).
(c) Divisione con il moltiplicatore
Il caso è con (già nel campo richiesto: nessuna premoltiplicazione).
- (a) .
- (b) L'errore relativo dell'approssimazione con fattori è : : ; : ; : ; : . Il risultato è , da rappresentare su 16 bit in 1.15 U (): , errore massimo di rappresentazione (relativo ). Perché l'algoritmo non peggiori il risultato serve : dà (non basta), dà ✓. . Valori parziali: : ; : .
- (c) Formato più conveniente: 1.15 U: .
- (d) Errore assoluto: valore rappresentato ; (eccesso negativo: rappresentato minore del vero).
Errori comuni
- Premoltiplicare con un fattore troppo grande: il quoziente supera 127 e la divisione non è ammessa.
- Premoltiplicare con un fattore troppo piccolo (perdita di accuratezza) o dimenticare di dividere per per riportare il risultato in scala.
- Assegnare al resto il segno del divisore: ha il segno del dividendo ( resto ).
- Applicare la serie quando è fuori da : va riportato nell'intervallo con una potenza di 2.
Versione ripasso
Testo. Divisione a 8 bit: fattore di scala per e ; ; con la serie (gennaio 2021, gennaio 2022, dicembre 2020, luglio 2026).
- Scala: massimo con quoziente : (32), , , errore ; (64), , , errore (Moltiplicatori veloci e divisionePer il controllo real-time serve un moltiplicatore a ciclo singolo: a look-up table (la tabella cresce come $2^{2n}\cdot2n$ bit, quindi si fa solo a pochi bit e si compongono prodotti da 4 bit: $A\cdot B=A_HB_H,2^{8}+(A_HB_L+A_LB_H)2^4+A_LB_L$) oppure a matrice (schiera di AND e sommatori, ritardo $\sim2n$; varianti a somma per colonne e di Wallace). La divisione hardware si fa con sottrazioni successive (con ripristino) su valori positivi e il segno alla fine ($D=Q,d+R$); con $n$ bit ci sono vincoli su dividendo e divisore. Senza divisore hardware: $Q=N/D$ con la serie $\frac{N(1+Z)(1+Z^2)\cdots}{1-Z^{2^n}}$, $D=1-Z$, $0{,}5<D<1$.Moltiplicatori veloci e divisione →).
- : quoziente , resto ; da 17 (quoziente 127) a 127.
- Serie: ; errore : non basta (), (); 1.15U
B6DB, errore . - Errori: fattore troppo grande o piccolo; resto col segno del divisore; fuori da (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 →).