30.12.2012 Views

Amiga Magazine Online

Amiga Magazine Online

Amiga Magazine Online

SHOW MORE
SHOW LESS

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

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

Saved successfully!

Ooh no, something went wrong!