21.05.2013 Views

Calcolo Numerico

Calcolo Numerico

Calcolo Numerico

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

2.3.3 Overflow e underflow<br />

Quando si vuole rappresentare numeri non contenuti in I (vedi 2.16), si può<br />

incorrere in condizioni d’errore. Due casi particolari si hanno quando:<br />

• |x| > r2. In questo caso si verifica una condizione di overflow.<br />

• 0 < |x| < r1. In questo caso invece si verifica una condizione di underflow.<br />

Nella prossima sezione verranno illustrati i metodi di recovery secondo lo standard<br />

IEEE 754 delle situazioni sopracitate.<br />

2.3.4 Lo standard IEEE 754<br />

Circa 40 anni fa l’anarchia minacciava l’aritmetica in virgola mobile.Oltre una<br />

dozzina di aritmetiche proprietarie, vantavano diverse wordsize 1 , precisioni,<br />

procedure di arrotondamento, e diversi comportamenti in caso di owerflow e<br />

underflow. Sviluppare codice portabile divenne molto presto economicamente<br />

costoso, visto la diversità di aritmetica mobile nelle svariate architetture. Circa<br />

30 anni fa, quando lo standard divenne ufficiale, la maggior parte dei produttori<br />

di microprocessori adottò questa architettura, malgrado la sfida lanciata dagli<br />

implementatori.Con un altruismo inaspettato, gli hardware designers uscirono<br />

dalla competizione per la progettazione della miglior aritmetica, con la speranza<br />

di incoraggiare e facilitare un più massiccio sviluppo di software numerico.<br />

Appunto fu creato lo standard ANSI/IEEE Std 754-1985. Questo standard<br />

fu definito per fare in modo che lo stesso software, potesse essere eseguito su<br />

più piattaforme, solamente ricompilando il codice sorgente, e con il requisito<br />

di dare lo stesso risultato se eseguito su piattaforme differenti. Lo standard in<br />

questione definisce tre tipi di formati per i numeri in virgola mobile: single,<br />

double, double extended. Affinché una macchina possa vantare di rispettare lo<br />

standard, deve implementare correttamente i numeri in virgola mobile in singola<br />

e doppia precisione. La doppia precisione estesa, infatti, opzionale, e non tutte<br />

le piattaforme e linguaggi la implementano. La mantissa memorizzata in forma<br />

binaira (base 2):<br />

. 1.f se il numero normalizzato ovvero se la prima cifra 1.<br />

. 0.f se il numero denormalizzato.<br />

Siccome la cifra della parte intera è sempre nota a priori, è possibile ometterla,<br />

risparmiando così 1 bit per la sua memorizzazione esplicita.<br />

Di seguito vengono mostrate più in dettaglio le due forme per i numeri in<br />

virgola mobile.<br />

• Singola precisione<br />

1 8 23 lunghezza in bit<br />

+-+--------+-----------------------+<br />

|s| e | f |<br />

+-+--------+-----------------------+<br />

32 31 23 0 indice dei bit<br />

1 lunghezza di un istruzione<br />

11

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!