Numeri Reali e Numeri Finiti: la propagazione degli errori

Appunti di Calcolo Numerico
Lezione1
Numeri Reali e Numeri Finiti: la propagazione degli errori
L’impiego di un calcolatore permette di effettuare operazioni elementari fra numeri in
tempi molto brevi offrendo la possibilità di risolvere problemi molto più complicati
mediante l’esecuzione di algoritmi complessi, costituiti da operazioni elementari.
Tuttavia il calcolatore, essendo una macchina finita, è costretto ad operare con
numeri rappresentati da un numero finito di cifre; ne consegue che in genere un
numero reale introdotto nel calcolatore viene approssimato.
Si pensi, ad esempio, ai numeri π o √2 che hanno un numero infinito di cifre.
Se si eseguono, poi, operazioni elementari sui numeri finiti si possono ottenere
risultati non più rappresentabili esattamente dal calcolatore. Questo significa che
eseguendo un algoritmo su un calcolatore si ha, in generale, una creazione e
propagazione degli errori.
Quindi, il risultato prodotto dall’algoritmo differisce dal risultato esatto cioè da quel
risultato che si otterrebbe idealmente lavorando con tutte le cifre richieste.
Il controllo degli errori introdotto dall’uso dei numeri finiti è molto importante al fine
di determinare l’attendibilità dei risultati ottenuti.
1
1. Rappresentazione dei Numeri Naturali: basi di Rappresentazione
Si consideri il sistema decimale per la rappresentazione dei numeri naturali.
Un numero intero positivo N viene espresso nella forma
N = d n ⋅ 10 n + d n −1 ⋅ 10 n −1 + ...... + d 1 ⋅ 101 + d 0 ⋅ 10 0
e rappresentato, mediante notazione posizionale, come
N = d n d n −1......d1d 0
dove le cifre
di
,
0 ≤ i ≤ n , sono numeri interi compresi tra 0 e 9.
Es. il numero naturale 425, nel sistema decimale è espresso nella forma:
425 = 400 + 20 + 5 =4*102 + 2*101 +5*100
Nel sistema decimale si è scelta come base il numero 10.
Considerando un sistema avente base generica β >1, si ha
N = (d n d n−1......d1d 0 ) β
= d n ⋅ β n + d n−1 ⋅ β n−1 + ...... + d1 ⋅ β 1 + d 0 ⋅ β 0
dove
0 ≤ d i ≤ β − 1 , con 0 ≤ i ≤ n .
Note basi di rappresentazione sono
la base binaria (β =2), ottale (β =8) ed
esadecimale(β =16).
Es. Sia il numero binario N=(100011111)2
Equivale a
N = 1*28 + 0*27 + 0*26 + 0*25 + 1*24 + 1*23 + 1*22 + 1*21 + 1*20
2
= 256 +0 + 0 + 0 + 16 + 8 + 4 +2 +1 = (287)10
⇒ (287)10=(100011111)2
β >1, vediamo come rappresentare in tale base un
Ora fissata una base intera
numero reale α.
Teorema: Rappresentazione dei Numeri Reali
Ogni numero reale α ≠0 può esprimersi univocamente, in base β, nella seguente
forma:
α = ± (a1β −1 + a2 β −2 + KK) ⋅ β p
+∞
= sign (α ) ⋅ (∑ ai β −i ) ⋅ β p = sign (α ) ⋅ m ⋅ β p
(1)
i =1
dove
•
 1 se x > 0
sign( x ) = 
− 1 se x < 0
(funzione segno)
• p ∈Z+, numero intero positivo
• le cifre ai sono numeri interi che soddisfano le seguenti condizioni:
I.
0 ≤ ai ≤ β − 1, i = 1,2,....
a1 ≠ 0
II. può esistere, eventualmente, un indice µ >1 tale che ∀ i ≥ µ sia ai = 0,
ma non esiste alcun indice ν > 0 tale che ∀ i ≥ ν sia ai =β-1.
Il numero
m = a1β −1 + a2 β −2 + KK
si chiama mantissa di α e soddisfa la
condizione
1
β
≤ m < 1.
3
β p si definisce parte esponente di α e p si chiama esponente di α .
Usando la notazione posizionale il numero α ≠0 si rappresenta
α = ±0.a1a2 a3 K β p
Rappresentazione
Normalizzata
Esempio: Il numero reale π può essere espresso in base β=10 nella forma
π = + (3 ⋅ 10 −1 + 1 ⋅ 10 −2 + 4 ⋅ 10 −3 + 1 ⋅ 10 −4 + 5 ⋅ 10 −5 + 9 ⋅ 10 −6......)101
e in rappresentazione normalizzata diviene
π = + (0.314159......)101 = 3.14159
2. I Numeri Finiti: Il Sistema Floating Point
Un numero reale è caratterizzato da segno, esponente e mantissa, in cui la
mantissa può essere costituita da un numero illimitato di cifre.
Lavorando con il calcolatore, comunque, ognuna di queste parti deve essere limitata,
ovvero rappresentata da un numero finito di bits. Da ciò nasce l’impossibilità di
rappresentare nel calcolatore l’insieme dei numeri reali. Occorre, quindi, definire una
rappresentazione approssimata dei numeri reali costituita da numeri la cui mantissa è
rappresentata da un numero finito di cifre.
Un numero finito si memorizza in un calcolatore in una parola costituita da l0 bits; in
ogni bit si memorizza una cifra binaria 0 oppure 1.
Consideriamo un calcolatore con β=2 e parola di lunghezza l0.
Tre sono le quantità da memorizzare nella parola: il segno, l’esponente e la mantissa.
4
Se la parola del calcolatore è di l0=32 bits la suddivisione standard è del tipo:
1bit
23 bits
Segno
Mantissa
8 bits
Esponente
l0 varia nel calcolatore a seconda della precisione con cui si lavora:
l0=32 in singola precisione
(1 segno; 8 esponente, 23 mantissa)
l0=64 in singola precisione
(1 segno; 11 esponente, 52 mantissa).
Fissato un intero t≥1, ad ogni numero reale α, espresso nella forma (1), si associa un
numero finito float di α , fl(α), che si esprime nella forma
0 se α = 0
fl (α ) = 
p
se α ≠ 0
 ± mt β
(2)
dove
m = a1β
−1
+ a2 β
−2
+ KK + at β
Nella (2) si suppone che
−t
t
= ∑ ai β − i
con a1 ≠ 0.
i =1
L ≤ p ≤ U.
In notazione posizionale si può esprimere come
fl (α ) = ±0.a1 a 2 ...a t β
p
.
Def: Insieme Floating Point
Si definisce Insieme dei Numeri di Macchina (Insieme Floating Point) con t cifre
significative, base β, range (L,U) per rappresentare l’esponente, l’insieme dei numeri
reali così definiti:
5

 t
−i  p 
F ( β , t , L,U ) = {0} ∪ α ∈ ℜ : α = sign(α ) ∑ ai β  β 
 i =1
 

con t e β interi positivi e β>1, 0 ≤ ai ≤
β − 1, i = 1,2,....
a1 ≠ 0 , L≤p≤U.
Teorema: Cardinalità dei numeri floating point
Sia F ( β , t , L, U ) l’insieme dei numeri floating point.
Allora esso possiede fl(0) e (β-1)·β
t-1
(U-L+1) numeri positivi non uniformemente
distribuiti in [βL-1,β U) e altrettanti numeri negativi non uniformemente distribuiti in
(-β U,-βL-1], ovvero
# F = 2 * ( β − 1) β t −1 (U − L + 1) + 1
Dim:
Ragioniamo solo sui numeri positivi.
La mantissa più piccola che si può scrivere in base β e con t cifre è
1 * β −1 + 0 * β −2 + ....0 * β − t = β −1
La mantissa più grande è
( β − 1) * β −1 + ( β − 1) * β −2 + ....( β − 1) * β − t = β 0 − β −1 + β −1 − β −2 + ... + β − t +1 − β − t = 1 − β − t
Numero totale di mantisse
(1 − β −t ) β t − β −1β t + 1 = β t − β 0 − β t −1 + 1 = β t −1 ( β − 1)
6
Es: base β = 10, t =5 cifre per la matissa,
la mantissa più piccola è 0.10000= 10-1
la mantissa più grande è 0.99999=1-10-5
il numero totale di mantisse è
(1 - 10-5 )105 - (10-1 )105 + 1 = 105 -1 -104 +1= 105 -104 = 104 (10-1))
Poiché per ogni mantissa si hanno (U-L+1) esponenti possibili
⇒
# elementi positivi in F= (β-1) β t-1 (U-L+1)
#F=2*(β-1) β t-1 (U-L+1) +1.
■
Si osserva che i numeri dell’insieme F sono ugualmente spaziati tra le potenze
successive di β ma non su tutto il range.
Es:
β=2, t=3, L=-1 e U=2
mpossibili=.100,…….,.111
Ogni mantissa è moltiplicata per βp ={2-1 20 21 22}
⇒ 4 mantisse possibili, 4 possibili esponenti
Da cui 16 numeri positivi, 16 negativi e lo zero
7
Da cui segue che #F=33
Tali numeri sono:
.100 2 -1 = (1 * 2 -1 ) 2 -1 = 1/2 ⋅ 1/2 = 4/16


.101 2 -1 = (1 * 2 -1 + 1 * 2 -3 ) 2 -1 = 5/16


-1
-1
-2
-1
.110 2 = (1 * 2 + 1 * 2 ) 2 = 6/16

-1
-1
-2
-3
-1
.111 2 = (1 * 2 + 1 * 2 + 1 * 2 ) 2 = 7/16 
4 numeri relativi a 2-1
.100 2 0 = (1 * 2 -1 ) 1 = 1/2 = 8/16


.101 2 0 = (1 * 2 -1 + 1 * 2 -3 ) 1 = 10/16

0
 4 numeri relativi a 2
0
-1
-2
.110 2 = (1 * 2 + 1 * 2 ) 1 = 12/16

0
-1
-2
-3
.111 2 = (1 * 2 + 1 * 2 + 1 * 2 ) 1 = 14/16
.100 21 = (1 * 2 -1 ) 2 = 1/2 ⋅ 2 = 16 /16


.101 21 = (1 * 2 -1 + 1 * 2 -3 ) 2 = 20 /16

1
 4 numeri relativi a 2
1
-1
-2
.110 2 = (1 * 2 + 1 * 2 ) 2 = 24 /16

1
-1
-2
-3
.111 2 = (1 * 2 + 1 * 2 + 1 * 2 ) 2 = 28/16
.100 2 2 = (1 * 2 -1 ) 4 = 1/2 ⋅ 4 = 32 /16


.101 2 = (1 * 2 + 1 * 2 ) 4 = 40 /16

2
 4 numeri relativi a 2
2
-1
-2
.110 2 = (1 * 2 + 1 * 2 ) 4 = 48/16

2
-1
-2
-3
.111 2 = (1 * 2 + 1 * 2 + 1 * 2 ) 4 = 56/16
2
-1
-3
Tali numeri sono equispaziati relativamente ad ogni singola base ma non
globalmente.
4
16
5
16
6
16
2-1
7
16
8
16
12
16
10
16
20
14
16
16
16
20
16
24
16
21
28
16
32
16
56
16
48
16
40
16
22
8
Nella rappresentazione di un numero reale positivo α della forma (1) in un sistema
di numeri di macchina F ( β , t , L, U ) , si possono presentare i seguenti casi:
1. Il numero α è tale che L≤p≤U e ai=0 per i>t
⇒ allora α è un numero di macchina ed è rappresentato esattamente.
2. p ∉ [L,U ]. Il numero non può essere rappresentato nel calcolatore.
• Se p<L si verifca un underflow e solitamente si assume lo zero come
valore approssimato, e ciò viene solitamente segnalato mediante
warning.
• Se p>U si verifica un overflow; non si approssima, ma si segnala
l’evento con un arresto del calcolo.
3. p ∈ [L,U ] , ma le cifre ai, per i>t non sono tutte nulle. Nasce il problema di
scegliere in F un rappresentante di α. Tale operazione può essere effettuata
mediante troncamento o arrotondamento.
Sia α ∈ ℜ + , α ≠0, tale che p ∈ [L,U ] e rappresentato in forma (1).
Si denota con fl(α) il numero di macchina tale che
• TRONCAMENTO
· fl (α ) = Τronc(α ) = β
t
p
∑a β
i =1
• ARROTONDAMENTO · fl (α ) = β Tronc (
p
t +1
∑a β
i =1
i
−i
−i
i
1
+ β −t +1 )
2
9
ES:
α = 0.54321
Troncamento
t=3
fl(α)=0.543
Arrotondamento fl(α)=Tronc(0.5432+0.0005)=Tronc(0.5437)=0.543
Nella sostituzione di α con fl(α) si ha l’origine degli errori di arrotondamento.
Occorre stabilire una stima della differenza tra α e fl(α) pesata sul valore di α .
Definizione: Si definisce Errore Relativo di arrotondamento di α la quantità
α − fl (α )
α
Teorema: Sia α un numero reale rappresentato in base β
+∞
α = ± (∑ ai β − i ) ⋅ β p , a1 ≠ 0,
i =1
p ∈ [L,U ]
Allora, se non si verifica un Overflow, si ha:
α − fl (α )
≤ K ⋅ β 1−t = eps
α
Con K=1
K=1/2
(3)
nel caso di troncamento
nel caso di arrotondamento
10
Dimostrazione:
a) caso troncamento
α = ±.a1a2 ....β p
fl (α ) = ±.a1a2 ...at β p
α − fl (α ) = .at +1at +2 ...β −t β p
α − fl (α ) .at +1at +2 ...β −t β p
=
con .at +1at +2 ... ≤ 1 e a1a2 ....... ≥ β −1
p
.a1a2 .......β
α
⇒
α − fl (α ) β −t
≤ −1 = β 1−t
α
β
b) Caso di arrotondamento
α − fl (α ) 1 −t p
≤ β β = β 1−t dalla definizione di arrotondamento
2
α
1 −t p
β β
1
α − fl (α ) 2
≤ −1 p = β 1−t
2
α
β β
■
La quantità eps = K ⋅ β 1−t è detta precisione di macchina nel sistema floating point:
eps è il più piccolo numero positivo di macchina tale che sommato all’unità
rende una quantità più grande di 1:
fl(1+eps)>1
11
E’ possibile determinare l’algoritmo per il calcolo di eps:
eps=1
eps=0.5*eps
eps1=1+eps
no
si
eps1 > 1
eps=2*eps
Un modo conveniente per esprimere la (3) è:
ε ≤ eps
fl(α)=α(1+ε)
ES: Dstribuzione dei numeri Floating Point - Lo standard IEC559
Nel 1985 l’ IEEE ha sviluppato uno standard per l’insieme dei numeri finiti F, in
modo da non avere nei diversi calcolatori numeri differenti.
IEC559 prevede due formati per i numeri floating point:
•
un formato base, costituito dai sistemi
F(2,24,-125,128)
per la singola precisione
F(2,53,-1021,1024)
per la doppia precisione
più l’insieme dei numeri denormalizzati.
12
• un formato esteso, per il quale vengono fissati i seguenti limiti:
semplice
doppia
N
≥ 43 bits
≥ 79
L
≤ -1021
≤ -16381
t
≥ 32
≥ 64
U
≥ 1024
≥ 16384
bits
Quasi tutti i calcolatori soddisfano queste proprietà. Ad esempio in un
Pentium si ha un sistema floating point F(2,24,-125,128) per la singola
precisione e F(2,53,-1021,1024) per la doppia, completato, in entrambi i
casi con i numeri denormalizzati.
Si osserva che, nello standard, sono previste alcune codifiche particolari che
corrispondono ai valori ±0, ±∞, NaN.
valore
esponente
mantissa
±0
L-1
0
±∞
U+1
0
NaN
U+1
≠0
13