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

Post on 13-May-2020

2 views 0 download

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

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

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

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

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)

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

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}

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)

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

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

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

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

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