25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

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.

1.7 Tipi di dati parametrizzati 51<br />

Parametri di kind per il tipo REAL<br />

<strong>Il</strong> parametro di tipo kind associato ad una variabile reale specifica la precisione (in termini<br />

di cifre decimali) ed il range degli esponenti (secondo la rappresentazione in potenze di 10).<br />

Poiché, infatti, i compilatori <strong>Fortran</strong> prevedono almeno due tipi diversi di variabili reali (singola<br />

precisione e doppia precisione) è necessario specificare quale tipo (kind) di variabile si vuole<br />

utilizzare: per specificare una di queste due varianti si usa lo specificatore KIND.<br />

<strong>Il</strong> tipo di variante reale è specificato esplicitamente includendone il valore fra parentesi nella<br />

istruzione di dichiarazione di tipo subito dopo lo specificatore di tipo, come mostrano le seguenti<br />

istruzioni:<br />

REAL(KIND=1) :: a, b, c<br />

REAL(KIND=4) :: x<br />

REAL(KIND=8) :: temp<br />

Si noti che la parola chiave KIND= è opzionale sicché le seguenti istruzioni:<br />

REAL(KIND=4) :: var<br />

REAL(4) :: var<br />

sono perfettamente equivalenti. Una variabile dichiarata esplicitamente con un parametro di<br />

kind si chiama variabile parametrizzata. Se non viene specificato alcun parametro KIND, viene<br />

utilizzato il tipo di variabile reale di default.<br />

Tuttavia, quale sia il significato dei numeri di kind non è possibile saperlo, nel senso che i<br />

produttori di compilatori sono liberi di assegnare i propri numeri di kind alle varie dimensioni<br />

delle variabili. Ad esempio, in alcuni compilatori un valore reale a 32 bit corrisponde a KIND=1<br />

e un valore reale a 64 bit corrisponde a KIND=2. In altri compilatori, invece, un valore reale a<br />

32 bit corrisponde a KIND=4 e un valore reale a 64 bit corrisponde a KIND=8. Di conseguenza,<br />

affinché un programma possa essere eseguito indipendentemente dal processore (portabilità del<br />

software) è consigliabile assegnare i numeri di kind ad apposite costanti ed utilizzare quelle<br />

costanti in tutte le istruzioni di dichiarazione di tipo. Cambiando semplicemente i valori di<br />

alcune costanti è possibile eseguire il programma su installazioni differenti. A chiarimento di<br />

quanto detto si può considerare il seguente frammento di programma:<br />

INTEGER, PARAMETER :: single=4<br />

INTEGER, PARAMETER :: double=8<br />

...<br />

REAL(KIND=single) :: val<br />

REAL(single) :: temp<br />

REAL(KIND=double) :: a, b, c<br />

(nell’esempio in esame, evidentemente, i valori 4 e 8 dipendono dallo specifico compilatore<br />

utilizzato).<br />

Una tecnica ancora più efficiente è quella di definire i valori dei parametri di kind in un<br />

modulo e utilizzare questo modulo nelle singole procedure all’interno del programma, come nel<br />

seguente esempio:

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

Saved successfully!

Ooh no, something went wrong!