laboratorio di architettura degli elaboratori · laboratorio di architettura degli elaboratori...

21
Laboratorio di Architettura degli Elaboratori Dott. Massimo Tivoli Numeri in virgola mobile

Upload: doandat

Post on 18-Feb-2019

247 views

Category:

Documents


0 download

TRANSCRIPT

Laboratorio di Architettura degli Elaboratori

Dott. Massimo Tivoli

Numeri in virgola mobile

Notazione Scientifica (normalizzata)

• Partendo da un qualsiasi numero reale:– 4,6664456

– 0,34 x 103

• Notazione scientifica (singola cifra a sinistra della virgola)

• Notazione scientifica normalizzata (cifra ≠ 0)

– 0,3432 x 102 (notazione scientifica)

– 12,234 x 102 (non in notazione scientifica)

– 1,34 x 102 (notazione scientifica normalizzata)

Virgola Mobile

• Virgola binaria

– In binario: 1,zzzzz x 2yyyy (Esempio: 1,101 x 22)

– Il parametro 2yyyy mi permette di scalare il valore del numero

• L’aritmetica dei calcolatori che supporta la virgola binaria si chiama in virgola mobile

• Garantire la notazione scientifica normalizzata per:

– Semplificare lo scambio di dati;

– Semplificare gli algoritmi su virgola mobile;

– Accresce l’accuratezza

Rappresentazione in virgola mobile

• Numero in virgola mobile:1,zzzzz x 2yyyy

• (-1)s x F x 2E

• 1,101 x 22 significa:s = 0 | F = 1,101 | E = 2

1,101 x 22=(-1)s x (1+(1x2-1)+(0x2-2)+(1x2-3)) x 22 =

(-1)s x (1+( 2-i x di) x 2E

0Bit di Segno (s)s =1 -

s = 0 +

8 bit Esponente (E)

000 0000 0000 0000000 0000

23 bit Mantissa (F)

Tradeoff:Mantissa molto grande:

maggior accuratezzaEsponente molto grande:

maggior intervallo di numeri rappresentabili

moduloe segno

Possibili problemi• Overflow:

– Quando l’esponente e’ troppo grande per poter essere rappresentato nel campo esponente

• Underflow:

– Quando l’esponente negativo e’ troppo grande per poter essere rappresentato nel campo esponente

• Per ridurre overflow ed underflow:

– Doppia precisione

0Bit di Segno (s) 11 bit di Esponente (E)

000 0000 0000 0000 0000 0000000 0000

20 bit di Mantissa (F)

0000 0000 0000 0000 0000 0000000 0000

Altri 32 bit di Mantissa (F)

Doppia precisione

• Parte dello standard IEEE 754 per la virgolamobile

– Utilizzato in ogni calcolatore dal 1980

– Migliorata molto l’aritmetica in virgola mobile

– Genera una maggiore accuratezza (mantissa grande)

– Per ottimizzare:

• La mantissa contiene implicitamente il bit iniziale a 1(24 o 53 bit di potere espressivo)

Doppia precisione

• Numero in virgola mobile:

– (-1)s x (1+F) x 2E

• 1,101 x 22 viene rappresentato come 0,101 x 22

– (-1)s x (1+(1x2-1)+(0x2-2)+(1x2-3)) x 22

Nota: # di registri

Double e Single

Precision

Somma (decimale) in virgola mobile

• Supponiamo di voler sommare questi due numeri: 9,452 x 10-1 + 7,342 x 10-2

Assumiamo di poter gestire solo quattro cifre dimantissa (nella notazione non IEEE)

1. Confronta gli esponenti. Esegui scalamento a destra del numero minore affinche’ gli esponenti

diventino uguali

2. Somma le mantisse

3. Normalizza la somma, scalando a destra o sinistra

4. Arrotonda la mantissa al numero opportuno di bit

1,101 x 2-1 + 1,001 x 2-3

1,001 x 2-3 -> 0,01001 x 2-1

1,101 x 2-1 + 0,01001 x 2-1

1,11101 x 2-1 -> 1,11101 x 2-1

1,11101 x 2-1 -> 1,111 x 2-1

– Step1: bisogna rendere gli esponenti uguali, rendendo il piu’ piccolo uguale al piu’ grande• 7,342 x 10-2 deve essere espresso in termini di 10-1

quindi: 7,342 x 10-2 0,734 x 10-1

– Step2: Somma delle mantisse• 9,452 x 10-1 + 0,734 x 10-1 = 10,186 x 10-1

– Step3: Rinormalizzare (se necessario)• 10,186 x 10-1

1,0186 x 100

– Step4: Arrotondamento mantissa (si somma 1 (o 0) all’ultimobit)• 1,0186 x 100

1,019 x 100

– Si potrebbe verificare di dover ri-normalizzare• e.g., 9,9999 x 100 -> 10,000 x 100 -> 1,000 x 10-1

Moltiplicazione (decimale) in virgola mobile

• Supponiamo di voler moltiplicare questi due numeri: 9,452 x 1012 * 7,342 x 10-2

Assumiamo di poter gestire solo quattro cifre dimantissa (nella notazione non IEEE)

1. Somma gli esponenti

2. Moltiplica le mantisse

3. Normalizza il prodotto, scalando a destra edincrementando l’esponente

4. Arrotonda la mantissa al numero opportuno di bit

5. Identifica il segno del prodotto

9,452 x 1012 * 7,342 x 10-2

1. Somma gli esponenti

2. Moltiplica le mantisse

3. Normalizza il prodotto, scalando a destra edincrementando l’esponente

4. Arrotonda la mantissa al numero opportuno di bit

5. Identifica il segno del prodotto

0,5 * -0,4375 =

N: 0,5Ni : 0 / 2 = Q:0 R:0 ->2 0

Nf : 0,5 * 2 = 1,0 ->2 0,1N2 : 0,1 = 1,0 x 2-1

1,000 x 2-1 * -1,110 x 2-2

-0,4375*2-0,8750*2-1,7500*2-1,8000*2-2,6000*2

-0,0111

-1 + (-2) = -3

1,000 * 1,110 = 1,110000

1,110000 x 2-3 è già normalizzato

1,110000 x 2-3 -> 1,110 x 2-3

- 1,110 x 2-3

Un altro esempio

Virgola mobile in MIPS

add.s $f2, $f4, $f6

add.d $f2, $f4, $f6

sub.s $f2, $f4, $f6

sub.d $f2, $f4, $f6

mul.s $f2, $f4, $f6

mul.d $f2, $f4, $f6

div.s $f2, $f4, $f6

div.d $f2, $f4, $f6

32 Registri in virgola mobile

$f0, …, $f31

lwc1 $f1, 100($s2)

swc1 $f1, 100($s2)

[email protected] $f2, $f4

[email protected] $f2, $f4

Dove @ = eq

neq

lt

le

gt

ge

bclt 25 (per true)

bclf 25 (per false)

Confronto in virgola mobile

Branch in virgola mobileControlla il flag generato dalle

Istruzioni di confronto(ci sono versioni delle stesse istr.

che permettono di specificarealtri flag)

VirgolaMobile.asm

= 11000010011000010000000000000000

virgola mobile in singola prec.: segno(1 bit) esponente(8 bit) mantissa(23 bit)

float1 = -56.25 0xc2610000 =

-

1+(2-1)+(2-2)+(2-7) = 1,7578125

132???-4???

-124???

Notazione polarizzata

• Esponenti negativi e positivi

• Notazione in complemento a 2– 1.0 x 2-1 = 0 11111111 00…0– 1.0 x 21 = 0 00000001 00…0– operazioni di confronto o ordinamento di difficile

gestione

• Polarizzazione– 00000000 rappresenta l’esponente più negativo: -126– 11111111 rappresenta l’esponente più positivo: 127

Polarizzazione

• Singola precisione– esponente -1 si rappresenta: -1+127 = 126 -> 01111110– Esponente +1 si rappresenta: +1+127 = 128 -> 10000000

• Doppia precisione– la polarizzazione per l’esponente è pari a 1023 ([-1022,1023])

• (-1)s * (1 + F) * 2(E-P)

• (-1)1 * (1+(2-1)+(2-2)+(2-7)) * 2(132-127) = -1,7578125*25 =-56.25

Domanda

• Nella rappresentazione dei numeri in virgola mobile, cosi’ come definita nell'IEEE 754, la notazione in complemento a 2 e’ usata per:

• [a] nessuno dei due

• [b] solo la mantissa

• [c] sia la mantissa che l'esponente

• [d] solo l'esponente

Domanda

• Si supponga di shiftare a sinistra il registro $s0 di 5 posizioni. Allora, il suo contenuto, considerato come numero senza segno, risultera’ moltiplicato per 2^5:

• [a] mai• [b] sempre• [c] solo se, prima dell'istruzione di shift, il valore

di $s0 era positivo• [d] solo se, prima dell'istruzione di shift, il valore

di $s0 era minore di 2^27