25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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!