laboratorio di architettura degli elaboratori · laboratorio di architettura degli elaboratori...
TRANSCRIPT
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
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