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.

54 Tipi ed espressioni<br />

Ancora una volta, eseguendo queste istruzioni sulla macchina di cui all’esempio precedente, il<br />

risultato sarebbe:<br />

4 8 8 8 8 -1 -2 -3<br />

dove il valore 4 rappresenta il numero di kind per la singola precisione mentre il valore 8<br />

rappresenta il numero di kind per la doppia precisione (chiaramente altri processori potrebbero<br />

fornire valori differenti). Gli ultimi tre valori della funzione sono, rispettivamente, -1, -2 e<br />

-3 in quanto nessun PC con processore Intel possiede una precisione di 17 cifre decimali o un<br />

range che vada da −10 500 a +10 500 .<br />

Esistono altre tre funzioni che possono tornare molto utili quando si lavora con tipi di dati<br />

parametrizzati. Esse sono:<br />

KIND(X)<br />

Restituisce il numero di kind di X essendo X una variabile o una costante di tipo<br />

qualsiasi (non necessariamente numerico).<br />

PRECISION(X)<br />

Restituisce la precisione decimale (ossia il numero di cifre decimali) della rappresentazione<br />

di X, essendo X un valore reale o complesso.<br />

RANGE(X)<br />

Restituisce il range di potenze decimali che può essere supportato dal tipo di X,<br />

essendo quest’ultimo un dato di tipo intero, reale o complesso.<br />

L’uso di queste funzioni è illustrato nel seguente programma:<br />

PROGRAM parametri_di_kind<br />

IMPLICIT NONE<br />

! Dichiarazione dei parametri<br />

INTEGER, PARAMETER :: single=SELECTED\_REAL\_KIND(p=6,r=37)<br />

INTEGER, PARAMETER :: double=SELECTED\_REAL\_KIND(p=13,r=200)<br />

! Dichiarazione del tipo delle variabili<br />

REAL(KIND=single) :: var1=0._single<br />

REAL(KIND=double) :: var2=0._double<br />

! Stampa dei parametri di kind delle variabili dichiarate<br />

WRITE(*,100) ’var1:’,KIND(var1),PRECISION(var1),RANGE(var1)<br />

WRITE(*,100) ’var2:’,KIND(var2),PRECISION(var2),RANGE(var2)<br />

100 FORMAT(1X,A,’KIND = ’,I2,’Precisione = ’,I2,’Range = ’,I3)<br />

END PROGRAM<br />

Se questo programma viene compilato con il compilatore Digital Visual <strong>Fortran</strong> 6.0 ed eseguito<br />

su un PC Pentium III, si otterrà il seguente risultato:<br />

var1: KIND = 4, Precisione = 6 Range = 37<br />

var1: KIND = 8, Precisione = 15 Range = 307

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

Saved successfully!

Ooh no, something went wrong!