Calcolo numerico/Rappresentazione floating dei numeri

Da testwiki.
Vai alla navigazione Vai alla ricerca

Template:Calcolo numerico

ℱ(β,t,L,U) è definito come {x=(sgnx.α1α2…αt)βp,0≤αt≤β−1,α1≠0,L≤p≤U} Matlab di default lavora con la doppia precisione.

Rappresentando i numeri macchina sulla retta reale, esistono m (barriera di underflow) e M (barriera di overflow) tali che al di fuori di (m,M) i numeri non siano rappresentabili. All'aumentare dei numeri, i numeri si diradano. Lo spacing nell'intervallo (βp,βp+1) è βp+1−t.

Floating di un numero

Template:Definizione

Ci sono varie possibilità:

  1. se p∉(L,U), e in particolare se p<L, si ha fl(x)=0 (numero troppo piccolo per essere rappresentato);
  2. se invece p>U, allora non viene rappresentato, ci troviamo nella bariera di overflow e viene dato un messaggio d'errore;
  3. quando L<p<U, e x ha più cifre di mantissa di quelle che abbiamo a disposizione, allora rappresento fl(x)=sgnx(α1αt−1αt¯)βp dove αt¯ viene determinata in base al procedimento del rounding.

Procedura del rounding

Nel caso L<p<U, il calcolatore applica la procedura del rounding:

  1. se αt+1<β/2, si ha αt¯=αt (rounding per difetto);
  2. se αt+1>β/2, si ha αt¯=αt+1 (rounding per eccesso);
  3. se αt+1=β/2, e αk=0∀k>t+1 si applica il rounding to even, cioè si pone αt¯=αt se αt è pari, altrimenti αt¯=αt+1. Il numero da rappresentare ha distanza uguale dai due estremi.

Esempio 1.3

Supponiamo di avere ℱ(10,2,−1,1). Scrivere il floating dei seguenti numeri:

1. x1=5.23=0.523∗101tre cifre di mantissa

at+1=3<10/2

fl(x1)=0.52∗101rounding per difetto

2. x2=5.27=0.527∗101

at+1=7>10/2

fl(x2)=0.53∗101rounding per effetto

3. x3=5.25=0.525∗101

at+1=5,at+n=0

fl(x3)=0,52rounding to even ''per difetto''

4. x4=5.35=0.535∗101

fl(x4)=0.54∗101rounding to even ''per eccesso''

5. x5=0.5253∗101

è spostato più a destra dell'intervallo, quindi si approssima per eccesso.

fl(x5)=0.53∗101rappresentazione per eccesso

Errore di rappresentazione

Dato un generico numero reale, lo si rappresenta sul calcolatore come fl(x), e ci si chiede di quanto è l'errore di rappresentazione.

Template:Definizione

Esempio 1.4

Consideriamo

α=0.1000

α¯=0.1001

(differiscono sulla quarta cifra decimale)

Ea=|α¯−α|=0.1∗10−4

er=10−410−1=10−3

ep=10−1=0.1%

Consideriamo poi

α=1000,α¯=1001

Ea=α−α¯=1

(l'errore assoluto differisce molto da quello precedente)

er=1/103=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.

Teorema 1.2

Supponiamo di essere nell'intervallo (βp−1,βp), dove lo spacing è di βp−t; consideriamo x∈ℝ, di cui bisogna fare il floating. Allora valgono le due seguenti affermazioni:

  1. Ea≤1/2βp−t (l'errore assoluto (x−fl(x)) è minore di metà dello spacing)
  2. Er<1/2β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), e aumenta in corrispondenza della grandezza del numero. L'errore relativo dipende solo dal numero di cifre di mantissa (t).

Dimostrazione (Secondo punto)

Dimostriamo il punto 2.

|x|=(.α1α2…αt)βp.

α1≥1, allora

|x|>(0.1)∗βp=βp−1

1|x|<β1−p

Er=|fl(x)−x||x|≤β1−p∗|fl(x)−x|

e siccome |fl(x)−x|=Ea≤1/2βp−t allora proseguendo con le disuguaglianze:

Er≤β1−p∗|fl(x)−x|≤1/2β1−pβp−t≤1/2β1−tdisuguaglianza∗

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 2−52.

Dimostrazione (Primo punto)

Nella disuguaglianza ∗ vale l'uguale nel caso in cui Ea=1/2βp−t (errore assoluto pari a metà dello spacing). Allora αt+1=β/2, e tutte le cifre successive αt+2,αt+3… sono nulle. Approssimiamo x al pari più vicino (rounding to even).

|x|=(.α1α2β/2000)βp

dove β/2=αt+1, ma allora α1≠0, quindi

x≥(0.α100β/200)βp

allora questo numero è strettamente maggiore di (0.α1000)βp>β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

Definizione 1.4

Supponiamo che x¯ approssima il numero x con Er<β1−t, allora si dice che t cifre della rappresentazione di x¯ sono esatte.

Se x¯∈ℱ approssima x in modo tale che le prime t cifre coincidono, allora Er<β1−t. Non vale viceversa: non è vero che se l'errore è più piccolo della quantità β1−t, allora le prime t cifre coincidono.

Esempio 1.5

Consideriamo ℱ=ℱ(10,5,L,U)

x=0.999995

Siamo nel caso del rounding to even.

fl(x)=0.1∗101

Template:Avanzamento