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.

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!