Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
L<br />
VINCENZO GERVASI<br />
I calcoli in vvirgoh mobile<br />
In realtà, l'insieme dei numeri esprimibili attraverso costanti<br />
è ancora più limitato: la versione attuale di EC, infatti,<br />
non accetta costanti più lunghe di nove cifre (fra<br />
parte intera e frazionaria), probabilmente perché utilizza<br />
internamente una qualche forma di rappresentazione in<br />
virgola fissa; è quindi impossibile esprimere costanti COme<br />
"sette miliardi" - per riuscirci, occorre "barare" co-<br />
DOPO aver affrontato nelle ultime puntate argomenti di<br />
grande utilità, ma sicuramente piuttosto complessi, ci occuperemo<br />
questo mese di una caratteristica di E in un<br />
certo senso "minore", di cui la maggior parte dei programmi<br />
non fa alcun uso: il supporto alllaritmetica in vir- struendo i numeri attraverso opportune operazioni (come<br />
gola mobile, ovvero ai calcoli con numeri non interi.<br />
Onestà ci impone di dire subito che questo aspetto del<br />
7.000.000 * 1.000). A noi non resta che sperare che l'autore<br />
del linguaggio ponga rimedio a questa limitazione.<br />
linguaggio non brilla certo per semplicità ed eleganza, FLOAT?<br />
ma con un po' di attenzione si potranno tranquillamente<br />
utilizzare i numeri in virgola mobile ove ce ne fosse biso- 11 linguaggio E non dispone di un tipo FLOAT specifico<br />
gno.<br />
per i numeri in virgola mobile; come abbiamo detto, essi<br />
appaiono in tutto e per tutto come delle comuni LONG,<br />
La rappresentazione<br />
con l'unica particolarità che il loro contenuto, interpretato<br />
secondo la codifica IEEE a singola precisione, rappre-<br />
Nella sintassi del linguaggio, le costanti in virgola mobile senta un valore in virgola mobile. Questa implementaziovengono<br />
denotate con l'usuale convenzione del punto ne ha una importantissima conseguenza: il compilatore<br />
decimale: 3.14 o -120.56, ma anche .25 (indica 0.25) o 1. non Può mai sapere se una data LONG rappresenta un<br />
(indica 1.0). Internamente, i numeri in virgola mobile intero o un numero in ~ i~ola mobile (o, se è per questo,<br />
vengono trattati come LONG (ricordate? "tutto in 32 bit"), un puntatore, un carattere O altro). Non ci stupirà dedurcodificati<br />
secondo lo standard Motorola FFP (per le ver- re che se il compilatore non sa qualcosa, tocca al prosioni<br />
di E precedenti la 3.0) o secondo lo standard IEEE<br />
a singola precisione (da E 3.0 in poi). Poiché l'intero<br />
grammatore indicarglielo. Lo strumento di questa indicasupporto<br />
ai calcoli in virgola mobile del linguaggio è sta- TabeUa I -Estensione (minimo e massimo) eprecisiom<br />
to riprogettato con la versione 3.0, nel seguito faremo ri- (epsilon) di diverse rappresentazioni dd numeri<br />
ferimento solo a quest'ultima e alle versioni successive. in virgola mobile.<br />
La rappresentazione scelta presenta vantaggi e<br />
svantaggi. I1 vantaggio principale è sicuramente<br />
l'uso di soli 32 bit e, quindi, la possibilità di me-<br />
morizzare valori in virgola mobile all'interno di<br />
una LONG: in questo modo, è possibile costruire<br />
e usare qualunque tipo di struttura dati (liste, liste<br />
LISP, OBJECT, array.. .) per gestire questi valori.<br />
Lo svantaggio principale è invece ... l'uso di soli 32<br />
bit, che limita in maniera abbastanza pesante la<br />
precisione ottenibile e l'intervallo dei numeri reali<br />
rappresentabile; in tabella 1 potete vedere un<br />
confronto fra diversi tipi di rappresentazione.<br />
Rappresentazione Bit Minimo Massimo epsilon<br />
IEEE precisione<br />
<strong>Amiga</strong>E 3.0 e successivi<br />
floatdi molti compilatori C<br />
IEEE doppia precisione<br />
di mo,H C<br />
Motorola FFP<br />
<strong>Amiga</strong>E 2.1 e<br />
47<br />
32<br />
64<br />
1.1753-38<br />
2,2253-308<br />
3.4033+38<br />
1.7983+308<br />
1.1923-07<br />
22203-16<br />
32 5.4213-20 9.223~+18 1.1923-07