1b CE Gest Realiberaldi/didattica03-04/LT/reali.pdf · Esempio La stringa esadecimale 0x80880000...

13
Numeri reali Sistema in virgola mobile (floating point)

Transcript of 1b CE Gest Realiberaldi/didattica03-04/LT/reali.pdf · Esempio La stringa esadecimale 0x80880000...

Page 1: 1b CE Gest Realiberaldi/didattica03-04/LT/reali.pdf · Esempio La stringa esadecimale 0x80880000 e’ un numero in formato IEEE.754. Calcolarne il valore. Segno = bit (31) = 1 = -

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…

Page 2: 1b CE Gest Realiberaldi/didattica03-04/LT/reali.pdf · Esempio La stringa esadecimale 0x80880000 e’ un numero in formato IEEE.754. Calcolarne il valore. Segno = bit (31) = 1 = -

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 produceunderflow– 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

Page 3: 1b CE Gest Realiberaldi/didattica03-04/LT/reali.pdf · Esempio La stringa esadecimale 0x80880000 e’ un numero in formato IEEE.754. Calcolarne il valore. Segno = bit (31) = 1 = -

ApprossimazioneErrore assoluto• In generale è impossibile rappresentare con esattezza tutti i valori reali disponendo di un numero finito di cifre ed impiegando il sistemaposizionale – 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’approssimazioneApprossimazioneErrore 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 � EA=0.00045• x=3.7459 � 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

Page 4: 1b CE Gest Realiberaldi/didattica03-04/LT/reali.pdf · Esempio La stringa esadecimale 0x80880000 e’ un numero in formato IEEE.754. Calcolarne il valore. Segno = bit (31) = 1 = -

ApprossimazioneErrore 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)

ApprossimazioneErrore assoluto• Approssimazione mediante arrotondamento:– La cifra c’p è cosi determinata • c’p=cp , se valore di 0.00..0cp+1cp+2... è < 0.5 x 10-p • c’p=cp +1 , se il valore di 0.00..0cp+1cp+2... > 0.5 x 10-p• Se il valore 0.00..0cp+1cp+2 è 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

Page 5: 1b CE Gest Realiberaldi/didattica03-04/LT/reali.pdf · Esempio La stringa esadecimale 0x80880000 e’ un numero in formato IEEE.754. Calcolarne il valore. Segno = bit (31) = 1 = -

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

ApprossimazioneErrore assoluto• Approssimazione mediante troncamento:– c’p=cp – L’errore assoluto vale al più 10-p (ed in generale B-p)

Page 6: 1b CE Gest Realiberaldi/didattica03-04/LT/reali.pdf · Esempio La stringa esadecimale 0x80880000 e’ un numero in formato IEEE.754. Calcolarne il valore. Segno = bit (31) = 1 = -

Esempio

x1= 3.973 XEA

x1= 3.9730.0005

x1= 3.974 XEA

x1= 3.9740.001

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

Page 7: 1b CE Gest Realiberaldi/didattica03-04/LT/reali.pdf · Esempio La stringa esadecimale 0x80880000 e’ un numero in formato IEEE.754. Calcolarne il valore. Segno = bit (31) = 1 = -

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 precisioneErrore relativo• Consideriamo i valori espressi x = c.F x 10E– Dove c è una cifra diversa da 0 – Esempi• 3.345 x 102 � ok• 3.002 x 104 � ok• 0.123 x 102 � 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}

Page 8: 1b CE Gest Realiberaldi/didattica03-04/LT/reali.pdf · Esempio La stringa esadecimale 0x80880000 e’ un numero in formato IEEE.754. Calcolarne il valore. Segno = bit (31) = 1 = -

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-1IEEE 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)

Page 9: 1b CE Gest Realiberaldi/didattica03-04/LT/reali.pdf · Esempio La stringa esadecimale 0x80880000 e’ un numero in formato IEEE.754. Calcolarne il valore. Segno = bit (31) = 1 = -

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 denormalizzataAlcuni parametri

-1022 … +1023-126 … +127 Intervallo esponente Eccesso 1023Eccesso 127Rappr. Esponente 6432Numero di bit, totale 5223Numero bit della frazione F 118Numero bit esponente 11Numero bit di segno Doppia PrecisioneSingola PrecisioneElemento

Page 10: 1b CE Gest Realiberaldi/didattica03-04/LT/reali.pdf · Esempio La stringa esadecimale 0x80880000 e’ un numero in formato IEEE.754. Calcolarne il valore. Segno = bit (31) = 1 = -

Formati

S EXP F

Singola Precisione (32 bit)

31 30..............23 22...........................................................................0

S EXP F

Doppia Precisione (64 bit)31 30..............20 19...........................................................................0

F

31...................................................................................................................0

Lunghezza campi: 1,8,23

Lunghezza campi: 1,11,52

Configurazioni

F x 2Emin

(1.F) x 2EXP-Bias ±±±± 0±±±± ∞∞∞∞ NaN

Page 11: 1b CE Gest Realiberaldi/didattica03-04/LT/reali.pdf · Esempio La stringa esadecimale 0x80880000 e’ un numero in formato IEEE.754. Calcolarne il valore. Segno = bit (31) = 1 = -

Esempio• Rappresentare in singola precisione il valore X=28,125• Parte Intera– 28 = 16+8+4 � 11100 • Parte Frazionaria – 0,125 = 1/8 � 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 = 0x41E10000Esempio• 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 Xmin 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

Page 12: 1b CE Gest Realiberaldi/didattica03-04/LT/reali.pdf · Esempio La stringa esadecimale 0x80880000 e’ un numero in formato IEEE.754. Calcolarne il valore. Segno = bit (31) = 1 = -

Range dei valori (normalizzati)Singola precisione 32 bit: 1 Segno, 8 Esponente, p=23 per F0-(1+[1 – 2-23]) x 2127 -1 x 2-126 ≈≈≈≈ 2128≈≈≈≈ 3.4x1038

≈≈≈≈ 1.2 x 10-380-(1 + [1 – 2-52]) x 21023 -1 x 2-1022 ≈≈≈≈ 21024

≈≈≈≈ 1.7x103082-1022Doppia precisione 64 bit: 1 Segno, 11 Esponente, p=52 per F2-126≈≈≈≈ 2.2 x 10-308

Esempio

La stringa esadecimale 0x56700000 e’ un numero in formato IEEE.754. Calcolarne il valore.

5 � 01016 � 01107� 0111

0 101 0110 0 111 0000 0000 0000 0000 000

Bit segno = 0� numero positivoEsponente = bit (30:23)-127=(10101100)2 - 127 = 172 – 127 = 45Mantissa = 1.bit(22:0) = (1.111)2 = 1.875

Risultato = + 1.875 x 245

Page 13: 1b CE Gest Realiberaldi/didattica03-04/LT/reali.pdf · Esempio La stringa esadecimale 0x80880000 e’ un numero in formato IEEE.754. Calcolarne il valore. Segno = bit (31) = 1 = -

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 = -126Mantissa = 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 0 0 0

3F/80/00/00