Numeri reali
Sistema in virgola mobile (floating point)
• Un numero reale X può essere espresso nella forma
X = f x 10E
•
dove, f è detta mantissa, E esponente
X = 0,314 x 101
• Fissato X, la virgola si sposta a sinistra (destra) se E aumenta
(diminuisce)
–
X = 3,14 x 100 = 0,314 x 101 =0,0314 x 102
• Per evitare ambiguità si dovrà definire una forma normalizzata…
Caratteristiche
• Ammettiamo di disporre di p = 3 cifre decimali per esprimere f
(0<|f|<1) k=2 per E. Inoltre usiamo i segni + e –
– |f| ∈ [0,10..0,999];
– |E| ∈ [0..99]
Calcolatori Elettronici, Beraldi, aa 03/04
Caratteristiche
• L’insieme S dei valori rappresentabili ha le seguenti proprietà
– E’ simmetrico rispetto allo 0
– Esiste un valore minimo diverso da 0 (0,1 x 10-99)
•
Il tentativo di esprimere un valore |X|>0, ma minore di 0,1 x 10-99 produce
underflow
– Esiste un valore massimo (0,99 x 1099)
•
•
Il tentativo di esprimere un valore n maggiore di 0,999 x 1099 produce overflow
Perdita della proprietà del continuo
– ∀ x,y ∈ R
(x+y)/2 ∈ R
– Ciò non è vero in S (approssimazione)
Calcolatori Elettronici, Beraldi, aa 03/04
Approssimazione
Errore assoluto
• In generale è impossibile rappresentare con esattezza tutti i valori reali
disponendo di un numero finito di cifre ed impiegando il sistema
posizionale
– Numeri irrazionali (π)
– Periodici (1/3 = 0,33..)
• Indichiamo con X il valore esatto e con x il valore approssimato
– X = 1/3
x =0,33
• Si definisce errore assoluto, EA, la differenza fra x ed X
• EA = X-x (|EA|=|X-x|)
• E’ una prima misura della bontà dell’approssimazione
Approssimazione
Errore assoluto
• Consideriamo un valore X e supponiamo di poter disporre di p cifre
• Qual e’ il l’errore assoluto massimo che si può commettere?
• Per esempio (base B=10)
– X = 3.745845 con p=4
– Due possibilità
•
•
x=3.7458
x=3.7459
EA=0.00045
EA=0.00055
• Il punto è che non siamo in grado di esprimere il valore denotato dalle
cifre nelle posizioni p+1,p+2,..
– Nell’esempio, il valore 0.00045
Approssimazione
Errore assoluto
• Il valore massimo denotato dall’allineamento 0,00..0cp+1cp+2…, vale al
più 10-p (ed in generale B-p, B base del sistema di numerazione)
• Poiché si perde al più un valore pari a 10-p, è sufficiente agire sulla cifra
in posizione p, cp, (dopo la virgola)
Approssimazione
Errore assoluto
• Approssimazione mediante arrotondamento:
– La cifra c’p è cosi determinata
p
p
, se
p
p
+1 , se
•
c’ =c
•
c’ =c
•
Se il valore
valore di 0.00..0c
p+1cp+2...
il valore di 0.00..0c
p+1cp+2...
p+1cp+2
0.00..0c
-p
è < 0.5 x 10
-p
> 0.5 x 10
è pari a 0.5 ci sono 2 alternative…
– L’errore assoluto vale al più 0,5 x 10-p (ed in generale 0,5 x B-p)
– Nota che aumentare la cifra in posizione p può portare ad una modifica
delle cifre nelle posizioni precedenti (p-1,p-2,..)
•
0,56796
0,5680
Esempio
• Calcolare l’errore assoluto che si commette rappresentando il valore
X=3.97356 mediante arrotondamento con p=3 cifre significative
•
•
•
•
Si ha
X = 3.97356
x = 3.974
|EA| =0.00044 < 0,5 x 10-3 = 0,0005
Approssimazione
Errore assoluto
• Approssimazione mediante troncamento:
– c’p=cp
– L’errore assoluto vale al più 10-p (ed in generale B-p)
Esempio
0.001
EA
EA
0.0005
x1= 3.973
X
x1= 3.974
x1= 3.973
x1= 3.974
X
Esempio
•
Calcolare l’errore assoluto che si commette rappresentando il valore
X=(0.10111)2 mediante troncamento o arrotondamento e p=3 cifre
significative
• Valore massimo errore assoluto = 0.5 x 2-3 = 2-4 = 1/16
• Troncamento
– x = 0.10111
x = 0.101
– |EA| = (0.10111- 0.101)2 = (0.00011)2 = (2-4+2-5 )10 = 1/16 + 1/32 = 3/32
• Arrotondamento
– x=0.110
– |EA| = (0.110 – 0.10111)2 = (110000)2 x 2-5 – (10111)2 x 2-5 = (24 –
23)/32 = 1/32 < 1/16
Errore relativo
• Si definisce errore relativo il rapporto
• ER = (X-x)/x = EA/x, con x≠0.
– Si impiega x al denominatore perché di solito si dispone del valore
approssimato
– X = x(1+ER)
• Perché è utile introdurre tale misura?
• Un errore di 1 cm su una misurazione di 10 m è diverso che un errore
di 1 cm su una misura di 10000 Km !
• E’ legato alla nozione intuitiva di precisione
Errore relativo
• Consideriamo i valori espressi x = c.F x 10E
– Dove c è una cifra diversa da 0
– Esempi
• 3.345 x 102
• 3.002 x 104
• 0.123 x 102
ok
ok
no!
• Ammettiamo di disporre di p>1 cifre significative per rappresentare la
parte frazionaria della mantissa, 0≤F<1
• Qual e’ l’errore relativo massimo che si può commettere?
• ER=EA/x
max{ER}=max{EA}/min{x}
Errore relativo e precisione
• Calcoliamo l’errore assoluto massimo
– Consideriamo due valori consecutivi (assumiamo esponente invariato)
• x1= F x 10E
• x2 = (F+10-p)x 10E
– L’errore massimo si commette quando X cade a metà fra x1 ed x2.
• max{EA}=(x2-x1)/2 =(0,5x10-p)x 10E
• Il valore minino di x vale
–
min{x}=1 x 10E
• L’errore relativo vale al più
– ERmax = (0,5x10-p)x 10E / 10E = 0,5x10-p = 2-1 x10-p
• Nel caso di base B=2
– ERmax = 2-p-1
IEEE Floating Point 754
Nozioni di base
• Standard IEEE 754
–
Introdotto nel 1985 come standard per aritmetica in virgola mobile per
consentire portabilità dei programmi
–
Praticamente supportato da tutte le CPU
• Necessità per calcoli numerici
–
Standard per rounding, overflow, underflow
• Formato base
–
Precisione singola (32 bit)
–
Precisione doppia (64 bit)
• Formato esteso
–
Precisione singola estesa (≥44 bit)
–
Precisione doppia estesa (≥80 bit)
IEEE Floating Point 754
Formati
• Esistono due forme: forma normalizzata e forma denormalizzata
• Forma normalizzata: (-1)s x 1.F x 2EXP-Bias
– s è il bit di segno
– Il primo bit della mantissa è sempre 1, e non è rappresentato (bit implicito)
– F={0,…,111..1}
•
Il valore 1.F è detto anche significando
– L’esponente E è dato in forma polarizzata, ossia si memorizza EXP=E+Bias
(Bias è la costante di polarizzazione)
• Forma denormalizzata: (-1)s x F x 2Emin
• Un numero è quindi espresso mediante la tripla di valori <S,F,EXP>
– Un valore di EXP=0 indica che il numero è in forma denormalizzata
Alcuni parametri
Elemento
Singola Precisione
Doppia Precisione
Numero bit di segno
1
1
Numero bit esponente
8
11
Numero bit della frazione F
23
52
Numero di bit, totale
32
64
Rappr. Esponente
Eccesso 127
Eccesso 1023
Intervallo esponente
-126 … +127
-1022 … +1023
Formati
Singola Precisione (32 bit)
31
30..............23
22...........................................................................0
S
EXP
F
Lunghezza campi: 1,8,23
Doppia Precisione (64 bit)
31
30..............20
19...........................................................................0
S
EXP
F
F
31...................................................................................................................0
Lunghezza campi: 1,11,52
Configurazioni
(1.F) x 2EXP-Bias
F x 2Emin
±
 0
± ∞
NaN
Esempio
Rappresentare in singola precisione il valore X=28,125
• Parte Intera
•
– 28 = 16+8+4
• Parte Frazionaria
– 0,125 = 1/8
•
11100
0,001
X=11100,001
• Trasformiamolo in formato IEEE 754 SP
–
–
–
–
–
Segno = 0
X = 1,1100001 x 24
f = 1100001
EXP=127+4 = 131 =128+2+1 10000011
X = 0 10000011 1100001 0000000000000000 = 0x41E10000
Esempio
• Calcolare il valore massimo, Xmax , esprimibile in SP
– EXP=254
•
il valore 255=(11111111)
2
è riservato
– F=(111…1)2, (23 bit)
– Xmax = (1.11…1) 2 x 2254-127 = (2-2-23) x 2127 ≈ 2128 ≈3.4 x 1038
• Calcolare il valore minimo X
min
che può essere espresso in SP
– EXP=1 (il valore 0 è riservato)
– F=0…0
– Xmin = (1.00…00) 2 x 21-127 = 2-126 ≈ 1.2 x 10-38
Range dei valori (normalizzati)
Singola precisione 32 bit: 1 Segno, 8 Esponente, p=23 per F
-(1+[1 – 2-23]) x 2127
-1 x 2-126 0
≈ 2128
2-126
≈ 1.2 x
10-38
≈ 3.4x1038
Doppia precisione 64 bit: 1 Segno, 11 Esponente, p=52 per F
-(1 + [1 – 2-52]) x 21023
-1 x 2-1022
0
2-1022
≈ 2.2 x
10-308
≈ 21024
≈ 1.7x10308
Esempio
La stringa esadecimale 0x56700000 e’ un numero in formato IEEE.754.
Calcolarne il valore.
5
6
7
0101
0110
0111
0 101 0110 0 111 0000 0000 0000 0000 000
Bit segno = 0
numero positivo
Esponente = bit (30:23)-127=(10101100)2 - 127 = 172 – 127 = 45
Mantissa = 1.bit(22:0) = (1.111)2 = 1.875
Risultato = + 1.875 x 245
Esempio
La stringa esadecimale 0x80880000 e’ un numero in formato IEEE.754.
Calcolarne il valore.
Segno = bit (31) = 1 = Esponente= bit(30:23) -127 = 000000012 - 127 = 1 – 127 = -126
Mantissa = 1. bit(22:0) = 1.00012
Risultato = -1.0625 x 2-126 (= -1.24896….. x 10-38)
Esempio
• Rappresentare il valore 1 in singola precisione IEEE 745
–
–
–
–
–
23 bit mantissa (parte frazionaria F),
1 segno (S)
8 esponente (EXP)
Forma normalizzata: 1.0 20 => s=1, f=0, EXP-127=0 (EXP=127)
s=0, EXP=127=(0111111)2, F=0 = (000..0)2,
s
exp
F
0 01111111 00000000000000000000000
0x 3
F
8
0
0
3F/80/00/00
0
0
0
Scarica

Rap2