Aritmetica di un calcolatore (Virgola mobile)

smartmouse
Salve, devo fare la somma dei seguenti numeri convertiti in binario:

-10,4375
9,9375


che in binario equivalgono rispettivamente a:

11000001101001110000000000000000
01000001100111110000000000000000



Sapete dirmi qual è il procedimento da fare?

Il risultato deve essere:
11000001101010101000000000000000

Grazie.

Risposte
TomSawyer1
E' chiaramente da spostare in Informatica questo topic.

Mancano dei dati. Cioe' devi specificare quanti bit per la mantissa e quanti per l'esponente sono assegnati nella stringa da 32 bit. Di solito sono 9 (o 8) per l'esponente e 23 (o 24) per la mantissa.

_luca.barletta
argomento spostato

smartmouse
"Crook":
E' chiaramente da spostare in Informatica questo topic.

Mancano dei dati. Cioe' devi specificare quanti bit per la mantissa e quanti per l'esponente sono assegnati nella stringa da 32 bit. Di solito sono 9 (o 8) per l'esponente e 23 (o 24) per la mantissa.


1 10000011 01001110000000000000000
0 10000011 00111110000000000000000


Il primo campo è il bit per il segno; i successivi 8 bit sono l'esponente polarizzato; il resto è la mantissa.


Scusate se ho sbagliato sezione, ma non avevo visto Informatica.

smartmouse
Riepilogando:

I numeri da sommare sono -10,4375 e 9,9375.

Conversione in binario:

10,4375 --> 1010.0111
9,9375 --> 1001.1111

-10,4375 --> 11010.0111
+9,9375 --> 01001.1111



Rappresentazione in virgola mobile:

-10,4375 --> 1 10000011 01001110000000000000000
+9,9375 --> 0 10000011 00111110000000000000000



...adesso come si fa la somma?

La teoria è questa:




Conto nel vostro aiuto, grazie.

TomSawyer1
Devi fare in modo che gli esponenti siano uguali, col rischio di perdere qualche bit della mantissa, poi basta fare la somma tra le mantisse.

smartmouse
...ma gli esponenti sono già uguali in questo caso.

Come si fa la somma tra le mantisse? Devo comprendere anche 0.1 che ho omesso nella rappresentazione?

TomSawyer1
Non avevo notato fossero uguali. In questo caso basta eseguire una normale differenza con riporti.

smartmouse
Il risultato deve essere:

1 10000011 01010101000000000000000, di cui la sola mantissa è: 01010101

Le mantisse da sommare corrispondenti ai due numeri sono:

0100111 (-10,4375) e 0011111 (9,9375)

giusto?

TomSawyer1
Si', sono quelle, la cui differenza e' 1111000. Con 1 di segno.

smartmouse
Come puoi vedere il risultato che hai ottenuto non si trova :(

Sbagliamo qualcosa?

TomSawyer1
Mi sono fidato della tua conversione in virgola mobile. Ricontrolla perché c'è qualche errore.

smartmouse
"Crook":
Mi sono fidato della tua conversione in virgola mobile. Ricontrolla perché c'è qualche errore.


Ho rifatto e ricontrollato la conversione, ma ottengo sempre lo stesso risultato. Sicuramente sbaglio qualcosa, potresti illustrarmi la retta via? :-)

smartmouse
Forse sbaglio proprio il procedimento.

Senza farti fare l'esercizio, che capisco, può portare via tanto tempo, quali sono i passi da seguire?

TomSawyer1
Le conversioni mi sembrano giuste, quindi non so come si faccia ad avere quel risultato. Sicuramente mi sfugge una cosa ovvia.

TomSawyer1
Le conversioni mi sembrano giuste, quindi non so come si faccia ad avere quel risultato. Sicuramente mi sfugge una cosa ovvia.

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