Sei sulla pagina 1di 42

Architettura degli elaboratori 2012/2013

Aritmetica binaria: Operazioni con i Float

Michele Jazzinghen Bianchi


1

Dipartimento di Ingegneria e Scienze dell'Informazione Universti degli Studi di Trento

13 Marzo 2013

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

1 / 22

It's answer TIME!

Alcune cose prima d'iniziare

Ve l'avevo detto che avrei risposto

Sul sito presente il codice in C per un'applicazione che vi mostra la struttura in bit di un single passato via comand line. Il segno di un numero signed pu venir cambiato facendo il complemento a 2 L'algoritmo di Booth un po' incasinato. Rivediamolo...

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

2 / 22

It's answer TIME!

Alcune cose prima d'iniziare

Booth Algoritm

Scorrere un bit alla volta, controllando quello alla sua destra In base alla coppia bisogner riportare un valore dierente, shiftato in base al bit preso in considerazione:

00 o 11: Nulla 10: sommare il complemento a 2 del primo termine 01: sommare il primo termine
Finiti i bit basta sommare tutti i termini

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

3 / 22

Riassunto dell'ultima puntata

Cos' successo l'ultima volta?

Abbiamo visto: Operazioni con i signed Rappresentazione dei numeri decimali con Fixed Point Limite della rappresentazione Fixed Point Rappresentazione dei numeri decimali con Floating Point Conversione in Floating Points

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

4 / 22

Float Operations

Idea di base

Floating Point

Idea di base

In teoria le operazioni tra oating point sono molto semplici:

x +f y = round (x + y ) x f y = round (x y )

Pi precisamente: Calcolare il risultato preciso Normalizzare la mantissa Mettere a posto il resto

Andare in overow se l'esponente troppo grande Arrotondare se ci sono troppi bit nella mantissa

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

5 / 22

Float Operations

Arrotondamento

Floating Point

Arrotondamento
Il medoto standard per i oat l'even rounding: in caso di valore in bilico arrotondare in modo che la cifra meno signicativa sia pari. Pi facile da implementare a livello hardware Migliore a livello statistico in caso di operazioni multiple su pi numeri arrotondati

I risultati con valori arrotondati per eccesso sono sovrastimati Quelli per difetto sottostimati

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

6 / 22

Float Operations

Arrotondamento

Floating Point

Arrotondamento
Il medoto standard per i oat l'even rounding: in caso di valore in bilico arrotondare in modo che la cifra meno signicativa sia pari. Pi facile da implementare a livello hardware Migliore a livello statistico in caso di operazioni multiple su pi numeri arrotondati

I risultati con valori arrotondati per eccesso sono sovrastimati Quelli per difetto sottostimati

Ad esempio (arrotondando al millesimo): 23.432500001 23.432499999 23.432500000 23.433500000 23.433 23.432 23.432 23.434 [Arrotondato per eccesso] [Arrotondato per difetto] [A met, pari, arrotondato per difetto] [A met, dispari, arrotondato per eccesso]

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

6 / 22

Float Operations

Arrotondamento

Floating Point

Arrotondamento binario

L'arrotondamento in binario funziona nella stessa maniera: Un numero binario Un numero binario

pari se la cifra meno signicativa 0 in bilico se dopo la cifra da arrotondare

troviamo 10...02

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

7 / 22

Float Operations

Arrotondamento

Floating Point

Arrotondamento binario

L'arrotondamento in binario funziona nella stessa maniera: Un numero binario Un numero binario

pari se la cifra meno signicativa 0 in bilico se dopo la cifra da arrotondare

troviamo 10...02

Ad esempio (arrotondando all'1/8): 10.011011102 10.011101012 10.011100002 10.010100002 10.0112 10.1002 10.1002 10.0102 [Arrotondato per difetto] [Arrotondato per eccesso] [A met, pari, arrotondato per difetto] [A met, dispari, arrotondato per eccesso]

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

7 / 22

Float Operations

Moltiplicazione

Floating Point

Moltiplicazione
L'idea semplice:

(1)s 1 M 1 2Exp1 f (1)s 2 M 2 2Exp2 = (1)s M 2Exp


Segno (s) Valore (M) Esponente (Exp) s1 M1 Exp1

s2 M2 + Exp2

Normalizzazione: Se il numero

> 12

210 ,

shiftate a destra ed incrementate Exp di uno.

Se l'esponente va oltre il massimo andiamo in

overow

Arrotondiamo il numero in modo che sia contenuto nella mantissa

La mantissa Ricordatevi che la mantissa tutta la parte a destra della virgola una volta arrivati ad avere un numero nel formato 1.
Michele Jazzinghen Bianchi (DISI)

mk mk 1 ...m1
Arch2013 2013-03-13 8 / 22

Float Operations

Esempio Moltiplicazione

Floating Point

Esempio di moltiplicazione

32.37510

76.1562510 =?

Spoilers: sar lunghetta

Passaggi: Convertire i numeri base 10 in numeri base 2 Normalizzarli (i.e. 1.

mmmm

moltiplicati per 2 )

Moltiplicare i due numeri ignorando l'esponente (Il problema sempre moltiplicare) Normalizzare il risultato & arrotondare/overow Calcolare l'esponente nale Calcolare il segno Mettere tutto assieme U.
Michele Jazzinghen Bianchi (DISI) Arch2013 2013-03-13 9 / 22

Float Operations

Esempio Moltiplicazione

Ok, let's rock!

= 100000.0112 20 = 1.000000112 25 0 6 76.1562510 = 1001100.001012 2 = 1.001100001012 2


32.37510

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

10 / 22

Float Operations

Esempio Moltiplicazione

Ok, let's rock!

= 100000.0112 20 = 1.000000112 25 0 6 76.1562510 = 1001100.001012 2 = 1.001100001012 2


32.37510 1. 0 0 1 1 0 0 0 0 1 0 1 x 1. 0 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 0 1 0 1 1 0 0 1 1 0 0 0 0 1 0 1 1 0 0 1 1 0 0 0 0 1 0 1 1 1 1 0 0 1 0 0 0 1 1 1 1 1. 0 0 1 1 0 1 0 0 0 0 1 1 0 0 0 1 1 1 1 =

= 1.00110100001100011112

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

10 / 22

Float Operations

Esempio Moltiplicazione

Esponente e segno

stata dura, eh?


Esponente:

(a bx ) (c by ) = (a c ) (bx by ) = (a c ) bx +y
510

+ 610 = 1110

Exp Segno:

= 1110 + 12710 = 13810 = 100010102

s =00=0

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

11 / 22

Float Operations

Esempio Moltiplicazione

Esponente e segno

stata dura, eh?


Esponente:

(a bx ) (c by ) = (a c ) (bx by ) = (a c ) bx +y
510

+ 610 = 1110

Exp Segno:

= 1110 + 12710 = 13810 = 100010102

s =00=0
Struttura nale del oat: 32.37510

76.1562510 = 01000101000110100001100011110000
Arch2013 2013-03-13 11 / 22

Michele Jazzinghen Bianchi (DISI)

Float Operations

Altro esempio

Altro esempio

Partendo da due oat

Float 1: 10011011001001101011100000000000 Float 2:

= 1.37906510 1022 24 01101000100010010010000000000000 = 5.180436010 10

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

12 / 22

Float Operations

Altro esempio

Altro esempio

Partendo da due oat

Float 1: 10011011001001101011100000000000 Float 2:

= 1.37906510 1022 24 01101000100010010010000000000000 = 5.180436010 10

1. 0 1 0 0 1 1 0 1 0 1 1 1 x 1. 0 0 0 1 0 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 1 1 1 1 0 1 0 0 1 1 0 1 0 1 1 1 1 0 1 0 0 1 1 0 1 0 1 1 1 1 0 1 0 0 1 1 0 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 0 0 0 1 0 0 1 0 0 0 1 1 1 1. 0 1 1 0 0 1 0 1 0 0 1 1 0 1 0 1 0 0 1 1 1 1 =

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

12 / 22

Float Operations

Limiti

L'altro esempio

Segno, Esponente e poi mettere tutto assieme

= 54 Exp 2: 110100012 = 209 Exp = (Exp 1 Bias) + (exp 2 Bias) + Bias = (Exp Exp = 54 + 209 127 = 136 = 100010002
Exp 1: 001101102

+ Exp 2) Bias

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

13 / 22

Float Operations

Limiti

L'altro esempio

Segno, Esponente e poi mettere tutto assieme

= 54 Exp 2: 110100012 = 209 Exp = (Exp 1 Bias) + (exp 2 Bias) + Bias = (Exp Exp = 54 + 209 127 = 136 = 100010002
Exp 1: 001101102 Sign: Sign 1

+ Exp 2) Bias

Sign

=10=1

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

13 / 22

Float Operations

Limiti

L'altro esempio

Segno, Esponente e poi mettere tutto assieme

= 54 Exp 2: 110100012 = 209 Exp = (Exp 1 Bias) + (exp 2 Bias) + Bias = (Exp Exp = 54 + 209 127 = 136 = 100010002
Exp 1: 001101102 Sign: Sign 1

+ Exp 2) Bias

Sign

=10=1

Risultato:

11000100001100101001101010011110

714.415810

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

13 / 22

Float Operations

Limiti

L'altro esempio

Segno, Esponente e poi mettere tutto assieme

= 54 Exp 2: 110100012 = 209 Exp = (Exp 1 Bias) + (exp 2 Bias) + Bias = (Exp Exp = 54 + 209 127 = 136 = 100010002
Exp 1: 001101102 Sign: Sign 1

+ Exp 2) Bias

Sign

=10=1

Risultato:

11000100001100101001101010011110

714.415810

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

13 / 22

Float Operations

Limiti

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

14 / 22

Intervallo

Danni? Danni.

Due errori piccoli non si annullano: ne fanno uno grosso.


25 febbraio 1991. Prima guerra del Golfo, codename

Operation: Desert Storm.

A Dharan, in Arabia Saudita, c' un accampamento americano protetto da una batteria

MIM-104

di missili Patriot, progettati specicatamente come missili

Terra-Aria con funzione anti balistica. Quindi nessun problema, giusto?

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

15 / 22

Intervallo

Danni? Danni.

Due errori piccoli non si annullano: ne fanno uno grosso.


25 febbraio 1991. Prima guerra del Golfo, codename

Operation: Desert Storm.

A Dharan, in Arabia Saudita, c' un accampamento americano protetto da una batteria

MIM-104

di missili Patriot, progettati specicatamente come missili

Terra-Aria con funzione anti balistica. Quindi nessun problema, giusto?

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

15 / 22

Intervallo

LOL, arrotondare

Quel giorno uno Scud iraqeno se ne passa indisturbato oltre l'area di rilevamento del sistema e fa saltare in aria una caserma con 28 soldati e ne ferisce un centinaio.

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

16 / 22

Intervallo

LOL, arrotondare

Quel giorno uno Scud iraqeno se ne passa indisturbato oltre l'area di rilevamento del sistema e fa saltare in aria una caserma con 28 soldati e ne ferisce un centinaio.

Nuove tecnologie segrete degli stati cagnaglia?

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

16 / 22

Intervallo

LOL, arrotondare

Quel giorno uno Scud iraqeno se ne passa indisturbato oltre l'area di rilevamento del sistema e fa saltare in aria una caserma con 28 soldati e ne ferisce un centinaio.

Nuove tecnologie segrete degli stati cagnaglia? Delle spie che avevano disabilitato i sistemi di sicurezza?

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

16 / 22

Intervallo

LOL, arrotondare

Quel giorno uno Scud iraqeno se ne passa indisturbato oltre l'area di rilevamento del sistema e fa saltare in aria una caserma con 28 soldati e ne ferisce un centinaio.

Nuove tecnologie segrete degli stati cagnaglia? Delle spie che avevano disabilitato i sistemi di sicurezza? Botta di sga?

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

16 / 22

Intervallo

LOL, arrotondare

Quel giorno uno Scud iraqeno se ne passa indisturbato oltre l'area di rilevamento del sistema e fa saltare in aria una caserma con 28 soldati e ne ferisce un centinaio.

Nuove tecnologie segrete degli stati cagnaglia? Delle spie che avevano disabilitato i sistemi di sicurezza? Botta di sga?

No, ovviamente! Anche qu ci niamo di mezzo noi.

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

16 / 22

Intervallo

LOL, arrotondare

Vi ricordate la parte sui Fixed Points?


Fondamentalmente il sistema automatico di controllo dei (che era in decimi). Per fare questo venivano utilizzati dei decimali in xed points da 24 bits. Solo che, come ricorderete, le operazioni con frazioni che non sono somme di potenze di due vengono arrotondate per speciche. Un bel modo per dire che non possiamo rappresentare questi numeri. 0.1010

MIM-104,

per tenere

traccia del tempo, moltiplicava per 1/10 il tempo tracciato dall'orologio in tempo

= 0.0001100110011001100110011001100...2

Noi, per, possiamo avvalerci solo di un numero nito di bit, quindi la rappresentazione a 24 bit sar: 0.000110011001100110011002 Introducendo un errore, per ogni operazione, pari a: 0.0000000000000000000000011001100...2
Michele Jazzinghen Bianchi (DISI) Arch2013

0.00000009510
2013-03-13 17 / 22

Intervallo

LOL, arrotondare

L'uptime mi uccide.
Il sistema di controllo del oltre 100 ore.

MIM-104

era acceso da

Ora, se fate due conti, questo vuol dire che l'errore accumulato era di

100h

60

m h

60

s m

10 0.000000095 = 0.342s

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

18 / 22

Intervallo

LOL, arrotondare

L'uptime mi uccide.
Il sistema di controllo del oltre 100 ore.

MIM-104

era acceso da

Ora, se fate due conti, questo vuol dire che l'errore accumulato era di

100h

60

m h

60

s m

10 0.000000095 = 0.342s

Nice. In .342s uno Scud si fa circa 700m. Questo basta per fare in modo che un sistema non si accorga neanche della presenza del missile e non lo intercetti. youhadonejob.jpg

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

18 / 22

Float Operations - 2

Somma/Sottrazione

Floating Point

Somma
Anche qu l'idea di base abbastanza semplice:

(1)s 1 M 1 2Exp1 +f (1)s 2 M 2 2Exp2 = (1)s M 2Exp


Per semplicit, nei calcoli, assumiamo che Exp1

Exp2

Avremo quindi: Exp = Exp1 S ed M saranno il risultato della somma (o sottrazione) dei due termini allineati

M andr comunque normalizzata: Se M> 1 allora dobbiamo shiftare a destra, aumentando Exp di 1 Se M< 1 allora dobbiamo shiftare a sinistra, diminuendo Exp di 1 Settiamo overow ed arrotondiamo se necessario.
Michele Jazzinghen Bianchi (DISI) Arch2013 2013-03-13 19 / 22

Float Operations - 2

Esempio Somma

Floating Point

Esempio di somma
Float 1: 01000011101110100100000000000000 Float 2:

= 372.52 01000010101111101100000000000000 = 95.3752

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

20 / 22

Float Operations - 2

Esempio Somma

Floating Point

Esempio di somma
Float 1: 01000011101110100100000000000000 Float 2:

= 372.52 01000010101111101100000000000000 = 95.3752

Exp = Max(Exp1, Exp2) = Exp1 = 8 M2 = 1.0111110112

26 = 0.010111110112 28
1. 0 1 1 1 0 1 0 0 1 +

0. 0 1 0 1 1 1 1 1 0 1 1 = 1. 1 1 0 1 0 0 1 1 1 1 1

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

20 / 22

Float Operations - 2

Esempio Somma

Floating Point

Esempio di somma
Float 1: 01000011101110100100000000000000 Float 2:

= 372.52 01000010101111101100000000000000 = 95.3752

Exp = Max(Exp1, Exp2) = Exp1 = 8 M2 = 1.0111110112

26 = 0.010111110112 28
1. 0 1 1 1 0 1 0 0 1 +

0. 0 1 0 1 1 1 1 1 0 1 1 = 1. 1 1 0 1 0 0 1 1 1 1 1

Risultato: 01000011111010011111000000000000

= 467.87510

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

20 / 22

Float Operations - 2

Esempio Sottrazione

Floating Point

Esempio di sottrazione
Float 1: 01000101000101101100100000000000 Float 2:

= 2.412510 103 4 11000110110110011101101000000000 = 2.788510 10

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

21 / 22

Float Operations - 2

Esempio Sottrazione

Floating Point

Esempio di sottrazione
Float 1: 01000101000101101100100000000000 Float 2:

= 2.412510 103 4 11000110110110011101101000000000 = 2.788510 10

Exp = Max(Exp1, Exp2) = Exp1 = 14 M2 = 1.0010110110012

211 = 0.0010010110110012 214

0. 0 0 1 0 0 1 0 1 1 0 1 1 0 0 1 + 0. 0 1 0 0 1 1 0 0 0 1 0 0 1 1 0 = 0. 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1. 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1

Michele Jazzinghen Bianchi (DISI)

Arch2013

2013-03-13

21 / 22

Float Operations - 2

Esempio Sottrazione

Floating Point

Esempio di sottrazione
Float 1: 01000101000101101100100000000000 Float 2:

= 2.412510 103 4 11000110110110011101101000000000 = 2.788510 10

Exp = Max(Exp1, Exp2) = Exp1 = 14 M2 = 1.0010110110012

211 = 0.0010010110110012 214

0. 0 0 1 0 0 1 0 1 1 0 1 1 0 0 1 + 0. 0 1 0 0 1 1 0 0 0 1 0 0 1 1 0 = 0. 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1. 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1

Risultato: 11000110110001110000000100000000

= 2.5472510 104
2013-03-13 21 / 22

Michele Jazzinghen Bianchi (DISI)

Arch2013

Float Operations - 2

Divisione

Floating Point

Divisione

Lasciata per ultima perch io odio la divisione (E poi saltano in aria caserme).

Come mai?
Arch2013 2013-03-13 22 / 22

Michele Jazzinghen Bianchi (DISI)

Float Operations - 2

Divisione

Floating Point

Divisione

Lasciata per ultima perch io odio la divisione (E poi saltano in aria caserme).

Voi non la odiavate alle ele... Med... Super... Vabbeh, quando si fa?

Come mai?
Arch2013 2013-03-13 22 / 22

Michele Jazzinghen Bianchi (DISI)

Float Operations - 2

Divisione

Floating Point

Divisione

Lasciata per ultima perch io odio la divisione (E poi saltano in aria caserme).

Voi non la odiavate alle ele... Med... Super... Vabbeh, quando si fa?

molto simile alla moltiplicazione, cambiano solo due cose: Fare la divisione invece che il prodotto tra le mantisse Exp, alla ne, sar (Exp1 - Exp 2) + Bias Lo faremo la prossima volta.
1

Come mai?
Arch2013 2013-03-13 22 / 22

Michele Jazzinghen Bianchi (DISI)

Potrebbero piacerti anche