Rappresentazione floating dei numeri

(Pywikibot v.2)
 
Riga 2: Riga 2:
 
<math>\mathcal F(\beta,t,L,U)</math> è definito come <math>\{ x = (\mathrm{sgn} x.\alpha_1 \alpha_2 \dots \alpha_t) \beta^p, \, 0\le \alpha_t \le \beta-1, \alpha_1 \neq 0, L\le p \le U \}</math>
 
<math>\mathcal F(\beta,t,L,U)</math> è definito come <math>\{ x = (\mathrm{sgn} x.\alpha_1 \alpha_2 \dots \alpha_t) \beta^p, \, 0\le \alpha_t \le \beta-1, \alpha_1 \neq 0, L\le p \le U \}</math>
 
Matlab di default lavora con la doppia precisione.
 
Matlab di default lavora con la doppia precisione.
 
  
 
Rappresentando i numeri macchina sulla retta reale, esistono <math>m</math> (barriera di underflow) e <math>M</math> (barriera di overflow) tali che al di fuori di <math>(m,M)</math> i numeri non siano rappresentabili. All'aumentare dei nueri, i numeri si diradano.
 
Rappresentando i numeri macchina sulla retta reale, esistono <math>m</math> (barriera di underflow) e <math>M</math> (barriera di overflow) tali che al di fuori di <math>(m,M)</math> i numeri non siano rappresentabili. All'aumentare dei nueri, i numeri si diradano.
Riga 9: Riga 8:
 
==Floating di un numero==
 
==Floating di un numero==
 
{{InizioDefinizione|titolo=|number=1.2|anchor=Definizione1_2}}
 
{{InizioDefinizione|titolo=|number=1.2|anchor=Definizione1_2}}
Supponiamo di avere <math>x \in \mathbb R</math> tale che
+
Supponiamo di avere <math>x \in \mathbb R</math> tale che<math display="block">x = (\mathrm{sgn} x . \alpha_1 \alpha_2 \dots \alpha_t)</math>Chiamo ''floating'' di <math>x</math>, <math>\mathrm{fl}(x)</math> il numero in <math>\mathcal F(\beta,t,L,U)</math> che associo a <math>x</math>, cioè il numero sul calcolatore con cui voglio rappresentarlo.
<math display="block">x = (\mathrm{sgn} x . \alpha_1 \alpha_2 \dots \alpha_t)</math>
 
Chiamo ''floating'' di <math>x</math>, <math>\mathrm{fl}(x)</math> il numero in <math>\mathcal F(\beta,t,L,U)</math> che associo a <math>x</math>, cioè il numero sul calcolatore con cui voglio rappresentarlo.
 
 
{{FineDefinizione}}
 
{{FineDefinizione}}
 
  
 
Ci sono varie possibilità:
 
Ci sono varie possibilità:
Riga 27: Riga 23:
 
#Se <math>\alpha_{t+1} > \beta/2</math>, si ha <math>\alpha_{\bar t} = \alpha_t+1</math> (rounding per eccesso);
 
#Se <math>\alpha_{t+1} > \beta/2</math>, si ha <math>\alpha_{\bar t} = \alpha_t+1</math> (rounding per eccesso);
 
#Se <math>\alpha_{t+1} = \beta/2</math>, e <math>\alpha_k =0 \, \forall k > t+1</math> si applica il rounding to even, cioè si pone <math>\alpha_{\bar t} = \alpha_t</math> se <math>\alpha_t</math> è pari, altrimenti <math>\alpha_{\bar t} = \alpha_t+1</math>. Il numero da rappresentare ha distanza uguale dai due estremi.
 
#Se <math>\alpha_{t+1} = \beta/2</math>, e <math>\alpha_k =0 \, \forall k > t+1</math> si applica il rounding to even, cioè si pone <math>\alpha_{\bar t} = \alpha_t</math> se <math>\alpha_t</math> è pari, altrimenti <math>\alpha_{\bar t} = \alpha_t+1</math>. Il numero da rappresentare ha distanza uguale dai due estremi.
 
 
  
 
{{InizioEsempio|titolo=|number=1.3|anchor=Esempio1_3}}
 
{{InizioEsempio|titolo=|number=1.3|anchor=Esempio1_3}}
Riga 41: Riga 35:
  
 
==Errore di rappresentazione==
 
==Errore di rappresentazione==
Dato un generico numero reale, lo si rappresenta sul calcolatore come <math>\mathrm{fl}(x)</math>, e ci si chiede di quanto è l'errore di rappresentazione.
+
Dato un generico numero reale, lo si rappresenta sul calcolatore come <math>\mathrm{fl}(x)</math>, e ci si chiede di quanto è l'errore di rappresentazione.{{InizioDefinizione|titolo=|number=1.3|anchor=Definizione1_3}}
 
+
L'<nowiki/>'''errore assoluto''<math>E_a</math>'''''<nowiki/>''è uguale a '''<math>|\mathrm{fl}(x)-x|</math>.''' L'<nowiki/>'''errore relativo''''' <math>E_r</math> è uguale a <math>\frac{|\mathrm{fl}(x)-x|}{|x|}</math>, con <math>x \neq 0</math>. Viene chiamato ''errore percentuale''<math>E_p = E_r*100</math>.
 
 
{{InizioDefinizione|titolo=|number=1.3|anchor=Definizione1_3}}
 
L'''errore assoluto''<math>E_a</math> è uguale a <math>|\mathrm{fl}(x)-x|</math>. L'''errore relativo''<math>E_r</math> è uguale a <math>\frac{|\mathrm{fl}(x)-x|}{|x|}</math>, con <math>x \neq 0</math>. Viene chiamato ''errore percentuale''<math>E_p = E_r*100</math>.
 
 
{{FineDefinizione}}
 
{{FineDefinizione}}
  
Riga 51: Riga 42:
  
 
{{InizioEsempio|titolo=|number=1.4|anchor=Esempio1_4}}
 
{{InizioEsempio|titolo=|number=1.4|anchor=Esempio1_4}}
Considero
+
Considero<math display="block">\alpha = 0.1000</math><math display="block">\bar \alpha = 0.1001</math>(differiscono sulla quarta cifra decimale)<math display="block">E_a = |\bar \alpha-\alpha| = 0.1*10^{-4}</math><math display="block">e_r = \frac{10^{-4}}{10^{-1}} = 10^{-3}</math><math display="block">e_p = 10^{-1} = 0.1 \%</math>Considero poi<math display="block">\alpha = 1000, \, \bar \alpha = 1001</math><math display="block">E_a = \alpha-\bar \alpha = 1</math>(l'errore assoluto differisce molto da quello precedente)<math display="block">e_r = 1/10^3 = 10^{-3}</math>(l'errore relativo è uguale a prima).<br>
<math display="block">\alpha = 0.1000</math><math display="block">\bar \alpha = 0.1001</math>
 
(differiscono sulla quarta cifra decimale)
 
<math display="block">E_a = |\bar \alpha-\alpha| = 0.1*10^{-4}</math><math display="block">e_r = \frac{10^{-4}}{10^{-1}} = 10^{-3}</math><math display="block">e_p = 10^{-1} = 0.1 \%</math>
 
 
 
Considero poi
 
<math display="block">\alpha = 1000, \, \bar \alpha = 1001</math><math display="block">E_a = \alpha-\bar \alpha = 1</math>
 
(l'errore assoluto differisce molto da quello precedente)
 
<math display="block">e_r = 1/10^3 = 10^{-3}</math>
 
(l'errore relativo è uguale a prima).
 
 
 
 
 
 
L'errore assoluto valuta il numero e l'ordine di grandezza. L'errore relativo non considera l'ordine di grandezza dei numeri confrontati.
 
L'errore assoluto valuta il numero e l'ordine di grandezza. L'errore relativo non considera l'ordine di grandezza dei numeri confrontati.
 
{{FineEsempio}}
 
{{FineEsempio}}
Riga 77: Riga 57:
 
(Dal teorema emerge che l'errore assoluto dipende anche dall'ordine di grandezza del numero (p), e aumenta in corrispondenza della grandezza del numero. L'errore relativo dipende solo dal numero di cifre di mantissa (t).
 
(Dal teorema emerge che l'errore assoluto dipende anche dall'ordine di grandezza del numero (p), e aumenta in corrispondenza della grandezza del numero. L'errore relativo dipende solo dal numero di cifre di mantissa (t).
  
 
+
{{InizioDimostrazione|title=Secondo punto}}
Dim. Dimostro il punto 2.
+
Dimostro il punto 2.<math display="block">|x| = (.\alpha_1 \alpha_2 \dots \alpha_t )\beta^p.</math><math>\alpha_1 \ge 1</math>, allora<math display="block">|x| > (0.1)*\beta^p = \beta^{p-1}</math><math display="block">\frac{1}{|x|} < \beta^{1-p}</math><math display="block">E_r = \frac{|\mathrm{fl}(x)-x|}{|x|} \le \beta^{1-p}*|\mathrm{fl}(x)-x|</math>e siccome <math>|\mathrm{fl}(x)-x|= E_a \le 1/2 \beta^{p-t}</math> allora proseguendo con le disuguaglianze:<math display="block">E_r \le \beta^{1-p}*|\mathrm{fl}(x)-x| \le 1/2 \beta^{1-p} \beta^{p-t} \le 1/2 \beta^{1-t} \quad \hbox{disuguaglianza} \ast</math>
<math display="block">|x| = (.\alpha_1 \alpha_2 \dots \alpha_t )\beta^p.</math><math>\alpha_1 \ge 1</math>, allora
+
{{FineDimostrazione}}Per poter dimostrare la disuguaglianza stretta (primo punto del teorema), notiamo la seguente osservazione:{{InizioOsservazione|titolo=|number=1.2|anchor=Osservazione1_2}}
<math display="block">|x| > (0.1)*\beta^p = \beta^{p-1}</math><math display="block">\frac{1}{|x|} < \beta^{1-p}</math><math display="block">E_r = \frac{|\mathrm{fl}(x)-x|}{|x|} \le \beta^{1-p}*|\mathrm{fl}(x)-x|</math>
 
e siccome <math>|\mathrm{fl}(x)-x|= E_a \le 1/2 \beta^{p-t}</math> allora proseguendo con le disuguaglianze:
 
<math display="block">E_r \le \beta^{1-p}*|\mathrm{fl}(x)-x| \le 1/2 \beta^{1-p} \beta^{p-t} \le 1/2 \beta^{1-t} \quad \hbox{disuguaglianza} \ast</math>
 
Dobbiamo però dimostrare la disuguaglianza stretta.
 
 
 
{{InizioOsservazione|titolo=|number=1.2|anchor=Osservazione1_2}}
 
 
Supponiamo di essere in base 2 con la doppia precisione, l'errore relativo che commettiamo rappresentando un numero con il suo floating è di <math>2^{-52}</math>.
 
Supponiamo di essere in base 2 con la doppia precisione, l'errore relativo che commettiamo rappresentando un numero con il suo floating è di <math>2^{-52}</math>.
{{FineOsservazione}}
+
{{FineOsservazione}}{{InizioDimostrazione|title=Primo punto}}
 
+
Nella disuguaglianza <math>\ast</math> vale l'uguale nel caso in cui <math>E_a = 1/2 \beta^{p-t}</math> (errore assoluto pari a metà dello spacing). Allora <math>\alpha_{t+1} = \beta/2</math>, e tutte le cifre successive <math>\alpha_{t+2}, \alpha_{t+3} \dots</math> sono nulle. Approssimo <math>x</math> al pari più vicino (rounding to even).<math display="block">|x| = (. \alpha_1 \alpha_2 \beta/2 0 0 0) \beta^p</math>dove <math>\beta/2 = \alpha_{t+1}</math>, ma allora <math>\alpha_1 \neq 0</math>, quindi<math display="block">x \ge (0.\alpha_1 0 0 \beta/2 0 0) \beta^p</math>allora questo numero è strettamente maggiore di <math>(0.\alpha_1 0 0 0) \beta^p > \beta^{p-1}</math> quindi la prima disuguaglianza nella catena sopra è stretta.
 
 
 
 
  
Nella disuguaglianza <math>\ast</math> vale l'uguale nel caso in cui <math>E_a = 1/2 \beta^{p-t}</math> (errore assoluto pari a metà dello spacing). Allora <math>\alpha_{t+1} = \beta/2</math>, e tutte le cifre successive <math>\alpha_{t+2}, \alpha_{t+3} \dots</math> sono nulle. Approssimo <math>x</math> al pari più vicino (rounding to even).
 
<math display="block">|x| = (. \alpha_1 \alpha_2 \beta/2 0 0 0) \beta^p</math>
 
dove <math>\beta/2 = \alpha_{t+1}</math>, ma allora <math>\alpha_1 \neq 0</math>, quindi
 
<math display="block">x \ge (0.\alpha_1 0 0 \beta/2 0 0) \beta^p</math>
 
allora questo numero è strettamente maggiore di <math>(0.\alpha_1 0 0 0) \beta^p > \beta^{p-1}</math> quindi la prima disuguaglianza nella catena sopra è stretta.
 
 
L'errore di rappresentazione in aritmetica floating-point è sempre più piccolo della round of unit.
 
L'errore di rappresentazione in aritmetica floating-point è sempre più piccolo della round of unit.
 
  
 
cvd
 
cvd
 
+
{{FineDimostrazione}}
 
 
 
{{InizioDefinizione|titolo=|number=1.4|anchor=Definizione1_4}}
 
{{InizioDefinizione|titolo=|number=1.4|anchor=Definizione1_4}}
 
Supponiamo che <math>\bar x</math> approssima il numero <math>x</math> con <math>E_r < \beta^{1-t}</math>, allora si dice che <math>t</math> cifre della rappresentazione di <math>\bar x</math> sono esatte.
 
Supponiamo che <math>\bar x</math> approssima il numero <math>x</math> con <math>E_r < \beta^{1-t}</math>, allora si dice che <math>t</math> cifre della rappresentazione di <math>\bar x</math> sono esatte.
 
{{FineDefinizione}}
 
{{FineDefinizione}}
  
 
+
Se <math>\bar x \in \mathcal F</math> approssima <math>x</math> in modo tale che le prime <math>t</math> cifre coincidono, allora <math>E_r < \beta^{1-t}</math>. Non vale il viceversa: non è vero che se l'errore è più piccolo della quantità <math>\beta^{1-t}</math>, allora le prime <math>t</math> cifre coincidono.{{InizioEsempio|titolo=|number=1.5|anchor=Esempio1_5}}
 
+
Considero <math>\mathcal F = \mathcal F(10,5,L,U)</math><math display="block">x = 0.999995</math>Sono nel caso del rounding to even. <math>\mathrm{fl}(x) = 0.1*10^1</math>.
 
 
Se <math>\bar x \in \mathcal F</math> approssima <math>x</math> in modo tale che le prime <math>t</math> cifre coincidono, allora <math>E_r < \beta^{1-t}</math>. Non vale il viceversa: non è vero che se l'errore è più piccolo della quantità <math>\beta^{1-t}</math>, allora le prime <math>t</math> cifre coincidono.
 
 
 
 
 
{{InizioEsempio|titolo=|number=1.5|anchor=Esempio1_5}}
 
Considero <math>\mathcal F = \mathcal F(10,5,L,U)</math><math display="block">x = 0.999995</math>
 
Sono nel caso del rounding to even. <math>\mathrm{fl}(x) = 0.1*10^1</math>.
 
 
{{FineEsempio}}
 
{{FineEsempio}}

Versione delle 12:46, 20 set 2017

è definito come Matlab di default lavora con la doppia precisione.

Rappresentando i numeri macchina sulla retta reale, esistono (barriera di underflow) e (barriera di overflow) tali che al di fuori di i numeri non siano rappresentabili. All'aumentare dei nueri, i numeri si diradano. Lo spacing nell'intervallo è .

Floating di un numero

Definizione 1.2

Supponiamo di avere tale che

Chiamo floating di , il numero in che associo a , cioè il numero sul calcolatore con cui voglio rappresentarlo.

 

Ci sono varie possibilità:

  1. Se , e in particolare se , si ha (numero troppo piccolo per essere rappresentato).
  2. Se invece , allora non viene rappresentato, ci troviamo nella bariera di overflow e viene dato un messaggio d'errore.
  3. Quando , e ha più cifre di mantissa di quelle che ho a disposizione, allora rappresento dove viene determinata in base al procedimento del rounding.

Procedura del rounding

Nel caso , il calcolatore applica la procedura del rounding:

  1. Se , si ha (rounding per difetto);
  2. Se , si ha (rounding per eccesso);
  3. Se , e si applica il rounding to even, cioè si pone se è pari, altrimenti . Il numero da rappresentare ha distanza uguale dai due estremi.
Esempio 1.3

Supponiamo di avere . Scrivere il floating dei seguenti numeri:

 
  1. sono spostata pià a destra dell'intervallo, quindi si approssima per eccesso.

Errore di rappresentazione

Dato un generico numero reale, lo si rappresenta sul calcolatore come , e ci si chiede di quanto è l'errore di rappresentazione.
Definizione 1.3

L'errore assolutoè uguale a . L'errore relativo è uguale a , con . Viene chiamato errore percentuale.

 


Esempio 1.4

Considero

(differiscono sulla quarta cifra decimale)
Considero poi
(l'errore assoluto differisce molto da quello precedente)
(l'errore relativo è uguale a prima).
L'errore assoluto valuta il numero e l'ordine di grandezza. L'errore relativo non considera l'ordine di grandezza dei numeri confrontati.

 


Teorema 1.2

Supponiamo di essere nell'intervallo , dove lo spacing è di , considero , di cui devo fare il floating. Allora valgono le due seguenti affermazioni:

  1. (l'errore assoluto () è minore di metà dello spacing)
  2. , (l'errore relativo è strettamente minore della round of unit).
 

(Dal teorema emerge che l'errore assoluto dipende anche dall'ordine di grandezza del numero (p), e aumenta in corrispondenza della grandezza del numero. L'errore relativo dipende solo dal numero di cifre di mantissa (t).

Dimostrazione (Secondo punto)

Dimostro il punto 2.

, allora
e siccome allora proseguendo con le disuguaglianze:

 
Per poter dimostrare la disuguaglianza stretta (primo punto del teorema), notiamo la seguente osservazione:
Osservazione 1.2

Supponiamo di essere in base 2 con la doppia precisione, l'errore relativo che commettiamo rappresentando un numero con il suo floating è di .

 
Dimostrazione (Primo punto)

Nella disuguaglianza vale l'uguale nel caso in cui (errore assoluto pari a metà dello spacing). Allora , e tutte le cifre successive sono nulle. Approssimo al pari più vicino (rounding to even).

dove , ma allora , quindi
allora questo numero è strettamente maggiore di quindi la prima disuguaglianza nella catena sopra è stretta.

L'errore di rappresentazione in aritmetica floating-point è sempre più piccolo della round of unit.

cvd

 
Definizione 1.4

Supponiamo che approssima il numero con , allora si dice che cifre della rappresentazione di sono esatte.

 
Se approssima in modo tale che le prime cifre coincidono, allora . Non vale il viceversa: non è vero che se l'errore è più piccolo della quantità , allora le prime cifre coincidono.
Esempio 1.5

Considero

Sono nel caso del rounding to even. .

 
 PrecedenteSuccessivo