[Generico] prodotto tra binario per una potenza di 2

Gol_D_Roger
Salve, ho un dubbio sulla risoluzione di questo esercizio:

Si consideri la notazione binaria in virgola mobile a 16 bit VM1 in cui (nell’ordine da sinistra a destra) si usa 1
bit per il segno (0=positivo), 6 bit per l’esponente (rappresentato in eccesso a 32 e nel quale le configurazioni fatte da tutti
0 e da tutti 1 sono riservate) e i rimanenti bit per la parte frazionaria della mantissa. Quando l’esponente è diverso da 0,
la mantissa è normalizzata tra 1 e 2. Quando invece vale 0, la mantissa è compresa tra 0 e 1 e si rappresentano numeri
denormalizzati, con esponente fisso a -31. Sia n il numero rappresentato in questa notazione dalla stringa esadecimale C737.

1.) Rappresentare nella notazione VM1 il numero $ m = n*2^-40 $ e indicare l’eventuale errore assoluto che si commette.

Il mio procedimento è questo:

trasformo C737 da esadecimale a binario e diventa:

$ 1100011100110111 $

dato che è negativo ne faccio il complemento a 2 :

$ 0011100011001001 $

quindi è :

$ -2^13(1,1100011001001) $

Quindi dico che m è :

$ m = -2^13*2^-40*(1,1100011001001) $ e dunque : $ m = -2^-27*(1,1100011001001) $

L' esercizio dice però che :

$ =-2^3(1.100110111) $ per C737

e

$ m=-2^−40*2^3*(1.100110111)=-2^−37(1.100110111)=-2^−31*2^-6(1.100110111)= -2^−31(0.00000100110111) $

quindi m:

$ m: 1 000000 000001001 $



non riesco a capire perchè. Potreste aiutarmi per favore?

Grazie in anticipo.

Risposte
apatriarca
Il complemento a due non è parte della rappresentazione in virgola mobile. Due numeri in virgola mobile che differiscono per il segno, hanno rappresentazioni binarie che differiscono per il solo bit più significativo. Il numero \(C737\) ha rappresentazione binaria \(1100011100110111\) e le sue parti saranno (basandosi sulla descrizione dell'esercizio):
1. Segno \(1\). Il numero è negativo.
2. Esponente \(100011.\) Essendo il numero in eccesso \(32,\) vale quindi \(3.\)
3. Mantissa \(100110111\) a cui va aggiunto un bit in quanto il numero è normalizzato (ha esponente diverso da \(000000\) e \(111111\)).

Il numero sarà quindi \( - 1.100110111 \times 2^{3} \) come nella soluzione dell'esercizio. Per quanto riguarda \(m,\) si ha che \(3-40 = -37 < 31\) e quindi il numero non è normalizzato. Avremo quindi che il segno rimane \(1\) e la mantissa sarà fissata a \(000000\). A questo punto abbiamo che \(- 1.100110111 \times 2^{-37} = - 0.00000100110111 \times 2^{-31} \) per cui la mantissa finale sarà \( 000001001 \) e il numero finale uguale a \(100000000001001 = 4009.\) In realtà, volendo arrotondare il risultato al valore più vicino avremmo dovuto usare \( 000001010, \) e quindi \(m = 400A\) ma è un dettaglio.

Gol_D_Roger
Grazie!

apatriarca
Ho appena notato di aver dimenticato di portare l'uno prima della virgola nel secondo numero e lo stesso sembra aver fatto il tuo professore.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.