Somma/sottrazione floating point
Salve a tutti!!
Qualcuno può spiegarmi come effettuare la somma e sottrazione tra due numeri floating point in base 2??
Grazie!!!
Qualcuno può spiegarmi come effettuare la somma e sottrazione tra due numeri floating point in base 2??
Grazie!!!
Risposte
per numeri in floating point intendi rappresentati secondo la ieee 754 o come?
in classe abbiamo usato 1 bit per il segno, 5 bit esponente, 6 bit per la mantissa
esponente e mantissa rappresentati come? modulo e segno, complemento a 1, complemento a 2, traslazione...
senza segno
si poi scusa la mantissa ha già il segno di fuori, ma l'esponente no...cosa che non capisco ma vabbeh...basta che tu porti tutto ad un esponente comune e poi esegui somma e sottrazione nei metodi classici...il pc ovviamente porta tutto ad esponente più alto poichè se lo dovesse abbastare l'approssimazione aumenterebbe e non riuscirebbe a memorizzarlo
per la somma basta che sommi bit a bit con l'eventuale riporto
per la sottrazione devi complementare a due il secondo numero, ossia not bit a bit e sommi uno, poi sommi i due numeri
per la somma basta che sommi bit a bit con l'eventuale riporto
per la sottrazione devi complementare a due il secondo numero, ossia not bit a bit e sommi uno, poi sommi i due numeri
"n1ghtmar3":
si poi scusa la mantissa ha già il segno di fuori, ma l'esponente no...cosa che non capisco ma vabbeh...basta che tu porti tutto ad un esponente comune e poi esegui somma e sottrazione nei metodi classici...il pc ovviamente porta tutto ad esponente più alto poichè se lo dovesse abbastare l'approssimazione aumenterebbe e non riuscirebbe a memorizzarlo
la codifica floating point non ha sub-codifiche come complemento a 2, ecc...
non è ad esponente comune (cioè la media), ma come dici il numero con esponente più piccolo lo si porta a quello più grande. Questo vuol dire shiftare a destra (normalizzare) la mantissa con exp più piccolo, della "distanza" degli esponenti.
sommi le mantisse risultanti:
"n1ghtmar3":
per la somma basta che sommi bit a bit con l'eventuale riporto
per la sottrazione devi complementare a due il secondo numero, ossia not bit a bit e sommi uno, poi sommi i due numeri
poi riporti l'exp (+Bias se nesessario).
per esponente comune intendevo portarle a stesso esponente...un umano può farlo con l'esponente che vuole, il pc invece può farlo solo con un esponente (il più grande)
la codifica floating point non so quale sia, io conosco la ieee 754 single e double precision e la single usa la rappresentazione il traslazione +127 per la mantissa, la double per traslazione ma non ricordo di quanto...quindi...
la codifica floating point non so quale sia, io conosco la ieee 754 single e double precision e la single usa la rappresentazione il traslazione +127 per la mantissa, la double per traslazione ma non ricordo di quanto...quindi...
Nella dispensa è scritto così:
Add/sub:
- Prendere il numero con esponente piu piccolo, shift mantissa a destra per
un numero di bit uguale alla differenza;
- Mettere l'esponente di entrambi gli operandi e del risultato uguale all'esponente
piu grande;
- add/sub della mantissa
- Normalize
Lo shift a destra l'ho capito, ma non ho capito il secondo e quarto punto..
Add/sub:
- Prendere il numero con esponente piu piccolo, shift mantissa a destra per
un numero di bit uguale alla differenza;
- Mettere l'esponente di entrambi gli operandi e del risultato uguale all'esponente
piu grande;
- add/sub della mantissa
- Normalize
Lo shift a destra l'ho capito, ma non ho capito il secondo e quarto punto..
il secondo punto è quel che dicevamo, ossia se tu hai x * 2^111 e y *2^001 devi scrivere x normale e fai lo shift a sinistra di y di 10 posizioni, poi fai l'operazione di somma o sottrazione e come esponente scrivi ovviamente 111