• Non ci sono risultati.

Aritmetica IEEE

N/A
N/A
Protected

Academic year: 2021

Condividi "Aritmetica IEEE"

Copied!
4
0
0

Testo completo

(1)

Aritmetica IEEE

Lo standard floating point IEEE `e un insieme di regole definito dall’istituto degli ingegneri elettrici e elettronici per la rappresentazione ed elaborazione dei numeri floating point nei computer.

Lo standard ha 4 scopi principali:

1. Rendere l’aritmetica floating point il pi`u accurata possibile;

2. Produrre risultati sensati in situazioni eccezionali;

3. Standardizzare le operazioni floating point fra i computer;

4. Dare al programmatore un controllo sulla manipolazione delle eccezioni;

Il punto (1) si ottiene in due modi. Lo standard specifica esattamente come un numero floating point dovrebbe essere rappresentato nell’hardware e richiede che le operazioni (addizione,radice,...) siano il pi`u accurate possibili.

Per il punto (2) lo standard produce Inf (Infinito) per indicare che un risultato

`e pi`u grande del massimo numero floating point rappresentabile e NaN (Not a Number) per indicare che un risultato non ha senso. Prima dello standard la maggior parte dei computer avrebbero bloccato un programma in tali circostanze. Il punto (3) ha alcune conseguenze:

(i) I numeri floating point possono essere trasferiti fra due computer che utilizzano lo standard IEEE in binario senza perdere precisione;

(ii) I dettagli dell’aritmetica floating point dovrebbero essere conosciuti dal programmatore;

1

(2)

2

(iii) Lo stesso programma su computer diversi dovrebbe produrre lo stesso risultato, anche se questo non `e vero in pratica.

Lo standard IEEE specifica esattamente cosa sono i numeri floating point e come sono rappresentati nell’hardware.

L’unit`a base di informazione immagazinata da un computer `e il bit, una variabile il cui valore `e o 0 o 1. I bit sono organizzati in gruppi di 8 chiamati byte. L’unit`a pi`u comune `e la parola di 4 byte (32 bit). Per accuratezze pi`u alte `e raddoppiata a 8 byte o 64 bit. Vi sono 2 possibili valori per un bit, 28 = 256 possibili valori per un byte e 232 differenti parole di 4 byte.

I due tipi di numeri rappresentati sono interi (fixed point) e reali (floating point). Un numero intero ha tipo float in c e real in FORTRAN. Nella maggior parte dei compilatori c e in Matlab un float ha per default 8 byte invece di 4.

L’aritmetica con gli interi `e molto semplice. Vi sono 232≈ 4 · 109 interi a 32 bit che coprono l’intervallo da−2 · 109 a 2· 109. Addizione, sottrazione e moltiplicazione sono fatte esattamente se la risposta `e compresa nell’interval- lo. La maggior parte dei computer danno risultati imprevedibili se il risultato

`e fuori dal range (overflow). Lo svantaggio dell’aritmetica con gli interi `e che non possono essere rappresentate le frazioni e l’intervallo dei numeri `e piccolo.

Un numero reale `e una versione della notazione esponenziale o scientifica.

Consideriamo l’espressione -.2491E-5

che `e un modo in cui un calcolatore potrebbe visualizzare il numero

−2.491 · 10−6.

Questa espressione consiste di un bit del segno, s = −1, una mantissa m = 2491, e un esponente e = −5. l’espressione s.mEe corrisponde al numero s0.m· 10e.

Il formato IEEE sostituisce la base 10 con la base 2. Quando una parola a 32 bit `e interpretata come un numero floating point il primo bit `e il bit del segno, s = + os =−. I successivi 8 bit formano l’esponente, e, e i rimanenti 23 bits determinano la mantissa, m. Vi sono 2 possibili segni, 256 esponenti (che variano da 0 a 255) e 223 ≈ 8.4 milioni di possibili mantisse. Per avere gli esponenti negativi si usa una convenzione: lo zero `e nella posizione 127, dopo ci sono i numeri positivi e prima i numeri negativi. Un numero floating point positivo ha il valore x = +2e−127· (1.m)2 dove m `e in base 2 e la notazione (1.m)2 indica che 1.m `e interpretata in base 2. La mantissa `e 1.m e non m.

In base due qualsiasi numero eccetto lo zero pu`o essere normalizzato in modo da avere la mantissa di questa forma. Non vi `e necessit`a di memorizzare 1 esplicitamente. per esempio il numero 2.752 ˙103 = 2572 pu`o essere scritto:

(3)

3

2752 = 211 + 29+ 27+ 26

= 211(1 + 2−2+ 2−4+ 2−5) =

= 211(1 + (0.01)2 + (0.0001)2+ (0.00001)2)

= 211· (1.01011)2

allora la rappresentazione di questo numero avrebbe segno + esponente e− 127 = 11e = 138 = (10001010)2 e m = (010110· · · 0)2.

Il caso e = 0 ( che corrisponde a 2−127) e il caso e = 255 (che corrisponde a 2128 hanno una interpretazione differente e complessa che rende la IEE diversa dagli altri standard.

Se e = 0 il valore `e x = +2−1260.m

questo `e chiamato underflow graduale (l’underflow `e la situazione in cui il risultato di una operazione `e diversa da zero ma `e pi`u vicina a zero di qualsiasi numero floating point). I numeri corrispondenti vengono chiamati denorma- lizzati. L’underflow graduale ha la conseguenza che due numeri floating point sono uguali se e solo se sottraendone uno dall’altro si ha esattamente zero.

L’uso di numeri denormalizzati ha significato quando si considera la distanza fra numeri floating point.

Se esludiamo i numeri denormali allora il pi`u piccolo numero positivo floating point `e a = e−126 ma il nuovo numero positivo b ha e = 1 e m = 0.0· · · 01, la distanza fra a e b `e 223 volte pi`u piccola, della distanza fra a e zero. Senza l’underflow graduale vi `e un gap fra zero ed il numero floating point pi`u vicino.

L’altro caso `e e = 255 che ha due sottocasi, Inf se m = 0 e N aN se m 6= 0. Sia il c che il matlab stampano Inf o NaN quando si stampa una variabile floating point che contiene questo risultato. Il computer produce Inf se il risultato di una operazione `e pi`u grande del pi`u grande numero rappresentabile.

Operazioni invalide che producono come risultato N aN sono: Inf /Inf , 0/0, Inf − Inf. Operazioni con Inf hanno il significato usuale: Inf + f inito = Inf , Inf /Inf = N aN , F inito/Inf = 0, Inf − Inf = NaN.

E Chiaro che l’accuratezza delle operazioni Floating Point `` e determinata dalla grandezza degli errori di arrotondamento. Questo errore di arroton- damento `e determinato dalla distanza del numero floating point pi`u vicino.

Eccetto che per i numeri denormalizzati, i numeri floating point differiscono di un bit, l’ultimo bit di m. Cio`e 2−23 ≈ 10−7 in singola precisione. Que- sto `e l’errore relativo e non l’errore assoluto. Questo si esprime dicendo che z = x + y produce (x + y)(1 + u) con u <  e la precisione di macchine e dell’ordine di 10−7 in singola precisione.

L’aritmetica IEEE `e invariante in scale, cio`e la distanza relativa fra due numeri floating point non dipende dalla grandezza del numero se essi non sono

(4)

4

denormalizzati. Una definizione comune di  `e che `e il pi`u piccolo numero positivo floating point tale che 1 +  6= 1. Misureremo sempre l’errore in termini relativi piuttosto che assoluti.

L’aritmetica IEEE in doppia precisione usa 8 byte (64 bit). Vi `e un bit del segno, 11 bit per l’esponente e 52 bit per la mantissa. Quindi in doppia precisione  = 2−52≈ 4·10−16. Cio`e l’aritmetica in doppia precisione da circa 15 digit decimali di accuratezza, invece di 7. Vi sono 211 possibili esponenti che variano da 1023 a -1022. Il pi`u grande numero `e circa 10307 ≈ 21023

Riferimenti

Documenti correlati

«La paura dell’infinito è una forma di miopia che distrugge la possibilità di vederlo realmente».

Programming Example: Convert Decimal Numbers to Floating Point Format.

nelle tavole gli zeri dopo la virgola indicano che il risultato è esatto: 256 è un quadrato perfetto.. 3° CASO estrarre la radice quadrata di un numero decimale. Esempio 7: determina

Forse perché sono le prime quattro, quelle più semplici, che si imparano alla scuola primaria, quelle indispensabili per fare i conti nella vita di tutti i giorni.. Ora

Nell'esempio sembrerebbe di sì, ma una proprietà generale deve valere sempre e non solo in un singolo esempio.. Quest'opera è stata rilasciata con licenza

Dopo la scissione la cellula madre non c'è più perché si è suddivisa generando le due cellule figlie, quindi con la scissione binaria da ogni batterio se ne originano due.. Il

[r]

Project: IEEE P802.15 Working Group for Wireless Personal Area Networks (WPANs) Project: IEEE P802.15 Working Group for Wireless Personal Area Networks (WPANs).. Submission Title: