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