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