F
(
β
,
t
,
L
,
U
)
{\displaystyle {\mathcal {F}}(\beta ,t,L,U)}
è definito come
{
x
=
(
s
g
n
x
.
α
1
α
2
…
α
t
)
β
p
,
0
≤
α
t
≤
β
−
1
,
α
1
≠
0
,
L
≤
p
≤
U
}
{\displaystyle \{x=(\mathrm {sgn} x.\alpha _{1}\alpha _{2}\dots \alpha _{t})\beta ^{p},\,0\leq \alpha _{t}\leq \beta -1,\alpha _{1}\neq 0,L\leq p\leq U\}}
Matlab di default lavora con la doppia precisione.
Rappresentando i numeri macchina sulla retta reale, esistono
m
{\displaystyle m}
(barriera di underflow ) e
M
{\displaystyle M}
(barriera di overflow ) tali che al di fuori di
(
m
,
M
)
{\displaystyle (m,M)}
i numeri non siano rappresentabili. All'aumentare dei numeri, i numeri si diradano. Lo spacing nell'intervallo
(
β
p
,
β
p
+
1
)
{\displaystyle (\beta ^{p},\beta ^{p+1})}
è
β
p
+
1
−
t
{\displaystyle \beta ^{p+1-t}}
.
Definizione
Supponiamo di avere
x
∈
R
{\displaystyle x\in \mathbb {R} }
tale che
x
=
(
s
g
n
x
.
α
1
α
2
…
α
t
)
{\displaystyle x=(\mathrm {sgn} x.\alpha _{1}\alpha _{2}\dots \alpha _{t})}
Chiamiamo
floating di
x
{\displaystyle x}
,
f
l
(
x
)
{\displaystyle \mathrm {fl} (x)}
il numero in
F
(
β
,
t
,
L
,
U
)
{\displaystyle {\mathcal {F}}(\beta ,t,L,U)}
che associo a
v
{\displaystyle v}
, cioè il numero sul calcolatore con cui vogliamo rappresentarlo.
Ci sono varie possibilità:
se
p
∉
(
L
,
U
)
{\displaystyle p\not \in (L,U)}
, e in particolare se
p
<
L
{\displaystyle p<L}
, si ha
f
l
(
x
)
=
0
{\displaystyle \mathrm {fl} (x)=0}
(numero troppo piccolo per essere rappresentato);
se invece
p
>
U
{\displaystyle p>U}
, allora non viene rappresentato, ci troviamo nella bariera di overflow e viene dato un messaggio d'errore;
quando
L
<
p
<
U
{\displaystyle L<p<U}
, e
x
{\displaystyle x}
ha più cifre di mantissa di quelle che abbiamo a disposizione, allora rappresento
f
l
(
x
)
=
s
g
n
x
(
α
1
α
t
−
1
α
t
¯
)
β
p
{\displaystyle \mathrm {fl} (x)=\mathrm {sgn} x(\alpha _{1}\alpha _{t-1}\alpha _{\bar {t}})\beta ^{p}}
dove
α
t
¯
{\displaystyle \alpha _{\bar {t}}}
viene determinata in base al procedimento del rounding .
Nel caso
L
<
p
<
U
{\displaystyle L<p<U}
, il calcolatore applica la procedura del rounding :
se
α
t
+
1
<
β
/
2
{\displaystyle \alpha _{t+1}<\beta /2}
, si ha
α
t
¯
=
α
t
{\displaystyle \alpha _{\bar {t}}=\alpha _{t}}
(rounding per difetto);
se
α
t
+
1
>
β
/
2
{\displaystyle \alpha _{t+1}>\beta /2}
, si ha
α
t
¯
=
α
t
+
1
{\displaystyle \alpha _{\bar {t}}=\alpha _{t}+1}
(rounding per eccesso);
se
α
t
+
1
=
β
/
2
{\displaystyle \alpha _{t+1}=\beta /2}
, e
α
k
=
0
∀
k
>
t
+
1
{\displaystyle \alpha _{k}=0\,\forall k>t+1}
si applica il rounding to even, cioè si pone
α
t
¯
=
α
t
{\displaystyle \alpha _{\bar {t}}=\alpha _{t}}
se
α
t
{\displaystyle \alpha _{t}}
è pari, altrimenti
α
t
¯
=
α
t
+
1
{\displaystyle \alpha _{\bar {t}}=\alpha _{t}+1}
. Il numero da rappresentare ha distanza uguale dai due estremi.
Supponiamo di avere
F
(
10
,
2
,
−
1
,
1
)
{\displaystyle {\mathcal {F}}(10,2,-1,1)}
. Scrivere il floating dei seguenti numeri:
1.
x
1
=
5.23
=
0.523
∗
10
1
tre cifre di mantissa
{\displaystyle x_{1}=5.23=0.523*10^{1}\,{\hbox{tre cifre di mantissa}}}
a
t
+
1
=
3
<
10
/
2
{\displaystyle a_{t+1}=3<10/2}
f
l
(
x
1
)
=
0.52
∗
10
1
rounding per difetto
{\displaystyle \mathrm {fl} (x_{1})=0.52*10^{1}\,{\hbox{rounding per difetto}}}
2.
x
2
=
5.27
=
0.527
∗
10
1
{\displaystyle x_{2}=5.27=0.527*10^{1}}
a
t
+
1
=
7
>
10
/
2
{\displaystyle a_{t+1}=7>10/2}
f
l
(
x
2
)
=
0.53
∗
10
1
rounding per effetto
{\displaystyle \mathrm {fl} (x_{2})=0.53*10^{1}\,{\hbox{rounding per effetto}}}
3.
x
3
=
5.25
=
0.525
∗
10
1
{\displaystyle x_{3}=5.25=0.525*10^{1}}
a
t
+
1
=
5
,
a
t
+
n
=
0
{\displaystyle a_{t+1}=5,\,a_{t+n}=0}
f
l
(
x
3
)
=
0
,
52
rounding to even ''per difetto''
{\displaystyle \mathrm {fl} (x_{3})=0,52\,{\hbox{rounding to even ''per difetto''}}}
4.
x
4
=
5.35
=
0.535
∗
10
1
{\displaystyle x_{4}=5.35=0.535*10^{1}}
f
l
(
x
4
)
=
0.54
∗
10
1
rounding to even ''per eccesso''
{\displaystyle \mathrm {fl} (x_{4})=0.54*10^{1}\quad {\hbox{rounding to even ''per eccesso''}}}
5.
x
5
=
0.5253
∗
10
1
{\displaystyle x_{5}=0.5253*10^{1}}
è spostato più a destra dell'intervallo, quindi si approssima per eccesso.
f
l
(
x
5
)
=
0.53
∗
10
1
rappresentazione per eccesso
{\displaystyle \mathrm {fl} (x_{5})=0.53*10^{1}\,{\hbox{rappresentazione per eccesso}}}
Dato un generico numero reale, lo si rappresenta sul calcolatore come
f
l
(
x
)
{\displaystyle \mathrm {fl} (x)}
, e ci si chiede di quanto è l'errore di rappresentazione.
Definizione
L'errore assoluto
E
a
{\displaystyle E_{a}}
è uguale a
|
f
l
(
x
)
−
x
|
{\displaystyle |\mathrm {fl} (x)-x|}
. L'errore relativo
E
r
{\displaystyle E_{r}}
è uguale a
|
f
l
(
x
)
−
x
|
|
x
|
{\displaystyle {\frac {|\mathrm {fl} (x)-x|}{|x|}}}
, con
x
≠
0
{\displaystyle x\neq 0}
. Viene chiamato errore percentuale
E
p
=
E
r
∗
100
{\displaystyle E_{p}=E_{r}*100}
.
Consideriamo
α
=
0.1000
{\displaystyle \alpha =0.1000}
α
¯
=
0.1001
{\displaystyle {\bar {\alpha }}=0.1001}
(differiscono sulla quarta cifra decimale)
E
a
=
|
α
¯
−
α
|
=
0.1
∗
10
−
4
{\displaystyle E_{a}=|{\bar {\alpha }}-\alpha |=0.1*10^{-4}}
e
r
=
10
−
4
10
−
1
=
10
−
3
{\displaystyle e_{r}={\frac {10^{-4}}{10^{-1}}}=10^{-3}}
e
p
=
10
−
1
=
0.1
%
{\displaystyle e_{p}=10^{-1}=0.1\%}
Consideriamo poi
α
=
1000
,
α
¯
=
1001
{\displaystyle \alpha =1000,\,{\bar {\alpha }}=1001}
E
a
=
α
−
α
¯
=
1
{\displaystyle E_{a}=\alpha -{\bar {\alpha }}=1}
(l'errore assoluto differisce molto da quello precedente)
e
r
=
1
/
10
3
=
10
−
3
{\displaystyle e_{r}=1/10^{3}=10^{-3}}
(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.
Supponiamo di essere nell'intervallo
(
β
p
−
1
,
β
p
)
{\displaystyle (\beta ^{p-1},\beta ^{p})}
, dove lo spacing è di
β
p
−
t
{\displaystyle \beta ^{p-t}}
; consideriamo
x
∈
R
{\displaystyle x\in \mathbb {R} }
, di cui bisogna fare il floating . Allora valgono le due seguenti affermazioni:
E
a
≤
1
/
2
β
p
−
t
{\displaystyle E_{a}\leq 1/2\beta ^{p-t}}
(l'errore assoluto (
x
−
f
l
(
x
)
{\displaystyle x-\mathrm {fl} (x)}
) è minore di metà dello spacing )
E
r
<
1
/
2
β
1
−
t
=
u
{\displaystyle E_{r}<1/2\beta ^{1-t}=u}
(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
{\displaystyle p}
), e aumenta in corrispondenza della grandezza del numero. L'errore relativo dipende solo dal numero di cifre di mantissa (
t
{\displaystyle t}
).
Dimostriamo il punto 2.
|
x
|
=
(
.
α
1
α
2
…
α
t
)
β
p
.
{\displaystyle |x|=(.\alpha _{1}\alpha _{2}\dots \alpha _{t})\beta ^{p}.}
α
1
≥
1
{\displaystyle \alpha _{1}\geq 1}
, allora
|
x
|
>
(
0.1
)
∗
β
p
=
β
p
−
1
{\displaystyle |x|>(0.1)*\beta ^{p}=\beta ^{p-1}}
1
|
x
|
<
β
1
−
p
{\displaystyle {\frac {1}{|x|}}<\beta ^{1-p}}
E
r
=
|
f
l
(
x
)
−
x
|
|
x
|
≤
β
1
−
p
∗
|
f
l
(
x
)
−
x
|
{\displaystyle E_{r}={\frac {|\mathrm {fl} (x)-x|}{|x|}}\leq \beta ^{1-p}*|\mathrm {fl} (x)-x|}
e siccome
|
f
l
(
x
)
−
x
|
=
E
a
≤
1
/
2
β
p
−
t
{\displaystyle |\mathrm {fl} (x)-x|=E_{a}\leq 1/2\beta ^{p-t}}
allora proseguendo con le disuguaglianze:
E
r
≤
β
1
−
p
∗
|
f
l
(
x
)
−
x
|
≤
1
/
2
β
1
−
p
β
p
−
t
≤
1
/
2
β
1
−
t
disuguaglianza
∗
{\displaystyle E_{r}\leq \beta ^{1-p}*|\mathrm {fl} (x)-x|\leq 1/2\beta ^{1-p}\beta ^{p-t}\leq 1/2\beta ^{1-t}\quad {\hbox{disuguaglianza}}\ast }
Per poter dimostrare la disuguaglianza stretta (primo punto del teorema), notiamo la seguente osservazione:
Supponiamo di essere in base 2 con la doppia precisione, l'errore relativo che commettiamo rappresentando un numero con il suo floating è di
2
−
52
{\displaystyle 2^{-52}}
.
Nella disuguaglianza
∗
{\displaystyle \ast }
vale l'uguale nel caso in cui
E
a
=
1
/
2
β
p
−
t
{\displaystyle E_{a}=1/2\beta ^{p-t}}
(errore assoluto pari a metà dello spacing ). Allora
α
t
+
1
=
β
/
2
{\displaystyle \alpha _{t+1}=\beta /2}
, e tutte le cifre successive
α
t
+
2
,
α
t
+
3
…
{\displaystyle \alpha _{t+2},\alpha _{t+3}\dots }
sono nulle. Approssimiamo
x
{\displaystyle x}
al pari più vicino (rounding to even ).
|
x
|
=
(
.
α
1
α
2
β
/
2000
)
β
p
{\displaystyle |x|=(.\alpha _{1}\alpha _{2}\beta /2000)\beta ^{p}}
dove
β
/
2
=
α
t
+
1
{\displaystyle \beta /2=\alpha _{t+1}}
, ma allora
α
1
≠
0
{\displaystyle \alpha _{1}\neq 0}
, quindi
x
≥
(
0.
α
1
00
β
/
200
)
β
p
{\displaystyle x\geq (0.\alpha _{1}00\beta /200)\beta ^{p}}
allora questo numero è strettamente maggiore di
(
0.
α
1
000
)
β
p
>
β
p
−
1
{\displaystyle (0.\alpha _{1}000)\beta ^{p}>\beta ^{p-1}}
, quindi la prima disuguaglianza nella catena sopra è stretta.
L'errore di rappresentazione in aritmetica floating-point è sempre più piccolo della round of unit .
cvd
Supponiamo che
x
¯
{\displaystyle {\bar {x}}}
approssima il numero
x
{\displaystyle x}
con
E
r
<
β
1
−
t
{\displaystyle E_{r}<\beta ^{1-t}}
, allora si dice che
t
{\displaystyle t}
cifre della rappresentazione di
x
¯
{\displaystyle {\bar {x}}}
sono esatte.
Se
x
¯
∈
F
{\displaystyle {\bar {x}}\in {\mathcal {F}}}
approssima
x
{\displaystyle x}
in modo tale che le prime
t
{\displaystyle t}
cifre coincidono, allora
E
r
<
β
1
−
t
{\displaystyle E_{r}<\beta ^{1-t}}
. Non vale viceversa: non è vero che se l'errore è più piccolo della quantità
β
1
−
t
{\displaystyle \beta ^{1-t}}
, allora le prime
t
{\displaystyle t}
cifre coincidono.
Consideriamo
F
=
F
(
10
,
5
,
L
,
U
)
{\displaystyle {\mathcal {F}}={\mathcal {F}}(10,5,L,U)}
x
=
0.999995
{\displaystyle x=0.999995}
Siamo nel caso del rounding to even .
f
l
(
x
)
=
0.1
∗
10
1
{\displaystyle \mathrm {fl} (x)=0.1*10^{1}}