Somma di FP formato IEEE754
Ciao a tutti, sto svolgendo un esercizio di architettura degli elaboratori ma ho un dubbio e non riesco a procedere.
Devo eseguire una somma tra due numeri FP espressi in IEEE754:
X = - 1,11111 x 2^5
Y = + 1,1110101 x 2^6
1) porto X allo stesso esponente di Y, quindi X = - 0,111111 x 2^6
2) faccio il complemento a 2 di X, quindi X = 1,000001 x 2^6
3) allineo X a Y e aggiungo uno zero alla fine di X che diventa 1,0000010 x 2^6.
Ora però non capisco cosa devo fare con la parte intera.
X ha come primo bit 1 infatti è negativo, ma anche Y ha come primo bit 1 però è positivo. Cosa devo fare?
Io aggiungerei uno zero davanti a Y ( = 01,1110101) e quindi per allineare aggiungo un altro 1 davanti alla X, in quanto negativa ( = 11,0000010). Ho fatto giusto?
Grazie in anticipo
Devo eseguire una somma tra due numeri FP espressi in IEEE754:
X = - 1,11111 x 2^5
Y = + 1,1110101 x 2^6
1) porto X allo stesso esponente di Y, quindi X = - 0,111111 x 2^6
2) faccio il complemento a 2 di X, quindi X = 1,000001 x 2^6
3) allineo X a Y e aggiungo uno zero alla fine di X che diventa 1,0000010 x 2^6.
Ora però non capisco cosa devo fare con la parte intera.
X ha come primo bit 1 infatti è negativo, ma anche Y ha come primo bit 1 però è positivo. Cosa devo fare?
Io aggiungerei uno zero davanti a Y ( = 01,1110101) e quindi per allineare aggiungo un altro 1 davanti alla X, in quanto negativa ( = 11,0000010). Ho fatto giusto?
Grazie in anticipo
Risposte
La notazione IEEE754 non utilizza una codifica basata sul complemento a due per rappresentare il segno. Il segno è infatti rappresentato da un particolare bit che non fa parte della mantissa. Non mi è quindi del tutto chiaro che cosa tu stia cercando di fare. Stai cercando di usare la somma tra numeri interi in complemento a due? Ma se è così il bit usato per il segno va aggiunto ai bit della mantissa e la virgola non dovrebbe stare dove l'hai messa.
I passaggi sono insomma i seguenti:
1. Portare entrambi i numeri allo stesso esponente.
2. Creare dei numeri interi usando i bit della mantissa.
3. Fare il complemento a due dei numeri negativi.
4. Fare la somma.
5. Estrarre il nuovo esponente e segno e calcolare la nuova mantissa.
Facendo i passaggi nel tuo esempio:
1. I numeri portati allo stesso esponente sono - 0,111111 x 2^6 e 1,1110101 come avevi già fatto.
2. Estraendo lo stesso numero di cifre dopo la virgola in entrambi i numeri e scrivendoli senza virgola si ottiene 001111110 e 011110101. Ho estratto 7 cifre dopo la virgola e 2 prima. Nota che in hardware tutto questo ha regole molto più precise di così..
3. Faccio il complemento a due del primo ottenendo 110000010. Come vedi solo questo ha il bit più significativo uguale a 1..
4. Sommo i due numeri ottenendo 001110111 (ho supposto di lavorare con 9 bit..).
5. Riscrivo il numero nuovamente con la virgola ottenendo 0,1110111 x 2^6 = 1,110111 x 2^5.
I passaggi sono insomma i seguenti:
1. Portare entrambi i numeri allo stesso esponente.
2. Creare dei numeri interi usando i bit della mantissa.
3. Fare il complemento a due dei numeri negativi.
4. Fare la somma.
5. Estrarre il nuovo esponente e segno e calcolare la nuova mantissa.
Facendo i passaggi nel tuo esempio:
1. I numeri portati allo stesso esponente sono - 0,111111 x 2^6 e 1,1110101 come avevi già fatto.
2. Estraendo lo stesso numero di cifre dopo la virgola in entrambi i numeri e scrivendoli senza virgola si ottiene 001111110 e 011110101. Ho estratto 7 cifre dopo la virgola e 2 prima. Nota che in hardware tutto questo ha regole molto più precise di così..
3. Faccio il complemento a due del primo ottenendo 110000010. Come vedi solo questo ha il bit più significativo uguale a 1..
4. Sommo i due numeri ottenendo 001110111 (ho supposto di lavorare con 9 bit..).
5. Riscrivo il numero nuovamente con la virgola ottenendo 0,1110111 x 2^6 = 1,110111 x 2^5.