numeri reali nel calcolatore: somma

Messaggioda zuffff » 20/02/2006, 19:39

Dato un numero reale decimale ad esempio 1,75 e convertito in binario (dovrebbe essere) 1,11, la sua rappresentazione all'interno del calcolatore supponendo i registri di 16 bit dovrebbe essere la seguente:
1° bit di segno
7 bit esponente (+64)
i rimanenti sono per la mantissa;
per questo il numero: 1,11 = 0 0100001 11100000.

Ora la questine è: se ho due numeri reali scritti in questo modo come faccio la somma???? :roll: :roll: :roll: :roll:
Grazie
zuffff
Starting Member
Starting Member
 
Messaggio: 12 di 29
Iscritto il: 31/01/2006, 19:08

Messaggioda Nidhogg » 20/02/2006, 21:59

Per la somma in virgola mobile c'è questo algoritmo:

1) Confronto degli esponenti dei due addendi. Scorrimento della mantissa dell'addendo minore a destra finchè il suo esponente non eguagli quello dell'addendo maggiore.

2) Somma delle mantisse dei due addendi.

3) Normalizzazione del risultato, o facendo scorrere la sua mantissa a destra e incrementando l'esponente, o facendo scorrere la mantissa a sinistra e decrementando l'esponente.

4) Esame trabboccamento. Se sì viene generata un'eccezione, altrimenti

5) Arrotondamento della mantissa al numero richiesto di bit di precisione.

6) Normalizzare ancora? Se sì fine, altrimenti passo (3).
"Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C." - Robert Firth
Nidhogg
Senior Member
Senior Member
 
Messaggio: 1078 di 1491
Iscritto il: 24/02/2004, 18:29
Località: Baronissi (Salerno) - Italia

Messaggioda zuffff » 21/02/2006, 19:27

Grazie, ma mi fai un esempio per favore? (così capisco meglio :-D )
Ad esempio ho 10.25 e 2.75 e voglio fare la somma reale in questo modo...
zuffff
Starting Member
Starting Member
 
Messaggio: 13 di 29
Iscritto il: 31/01/2006, 19:08

Messaggioda Nidhogg » 21/02/2006, 22:14

Ti posto un esempio con numeri diversi (già pronto!!!).

Sommare in binario i numeri reali decimali $0,5_{10}$ e $-0,4375_{10}$.

Per prima cosa, occorre trasformare i due addendi in base due, naturalmente in notazione scientifica normalizzata. Ipotizziamo una precisione di quattro bit.

$-0,5_{10}=(1/2)_{10}=(1/(2^1))_{10}=0,1_2=0,1_2x2^0=1,000_2x2^(-1)$
$-0,4375_{10}=(-7/16)_{10}=-0,0111_2=-0.0111_2x2^0=-1,110_2x2^(-2)$

Algoritmo:

Fase 1: La mantissa dell'addendo con esponente minore ($-1,110_2x2^(-2)$) va fatta scorrere verso desra, finchè l'esponente dell'addendo relativo non diventi uguale a quello dell'altro addendo:

$-1,110_2x2^(-2)=-0,111_2x2^(-1)$

Fase 2: Somma delle mantisse:

$1,000_2x2^(-1)+(-0,111_2x2^(-1))=0,001_2x2^(-1)$

Fase 3: Normalizzazione del risultato della somma delle mantisse, controllando anche l'eventuale traboccamento, verso l'alto o verso il basso, dell'esponente:

$0,001_2x2^(-1)=0,010_2x2^(-2)=0,100_2x2^(-3)=1,000_2x2^(-4)$

Dato che $127>=-4>=-126$, non si verifica traboccamento (il campo esponente, che si intepreta in rappresentazione polarizzata, vale -4+127, cioè 123, valore che cade nell'intervallo tra 0 e 255, i due valori estremi per il campo esponente).

Fase 4: Arrotondamento del risultato della somma:

$1,000_2x2^(-4)$

Il risultato è già rappresentato con precisione di quattro bit, perciò non c'è alcun bisogno di arrotondare. Il risultato convertito in decimale è:

$1,000_2x2^(-4)=0,0001000_2=0,0001_2=(1/(2^4))_{10}=(1/16)_{10}=0,0625_{10}.

Questo è proprio il risultato della somma tra $0,5_{10}$ e $-0,4375_{10}$.

Che fatica!!! :-D
"Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C." - Robert Firth
Nidhogg
Senior Member
Senior Member
 
Messaggio: 1079 di 1491
Iscritto il: 24/02/2004, 18:29
Località: Baronissi (Salerno) - Italia

Messaggioda zuffff » 22/02/2006, 14:41

grazie mille :-D
zuffff
Starting Member
Starting Member
 
Messaggio: 14 di 29
Iscritto il: 31/01/2006, 19:08


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite