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 53<br />

PRINT*, "<strong>Il</strong> numero di kind per la singola precisione e’: ", KIND(0.0E0)<br />

PRINT*, "<strong>Il</strong> numero di kind per la doppia precisione e’: ", KIND(0.0D0)<br />

Se queste istruzioni venissero eseguite su un PC con processore Intel Pentium III che usi il<br />

compilatore Digital Visual <strong>Fortran</strong> 6.0, l’output sarebbe:<br />

<strong>Il</strong> numero di kind per la singola precisione e’: 4<br />

<strong>Il</strong> numero di kind per la doppia precisione e’: 8<br />

Evidentemente, passando ad un altro processore oppure utilizzando un diverso compilatore il<br />

risultato potrebbe essere differente.<br />

Per poter eseguire un programma in maniera corretta su processori differenti è necessario<br />

un meccanismo in grado di selezionare automaticamente il parametro appropriato per il valore<br />

reale quando il programma venga trasferito fra due sistemi differenti. Tale meccanismo<br />

è rappresentato dalla funzione intrinseca SELECTED_REAL_KIND: quando viene eseguita, essa<br />

restituisce il numero del parametro di kind del più piccolo valore reale che soddisfa il range e<br />

la precisione richiesti da un particolare processore. La forma generale di questa funzione è:<br />

numero_di_kind = SELECTED_REAL_KIND(p=precisione, r=range)<br />

dove precisione rappresenta il numero di cifre decimali della precisione richiesta e range è<br />

l’intervallo richiesto per gli esponenti delle potenze di 10. I due argomenti precisione e range<br />

sono facoltativi nel senso che è possibile specificare uno o entrambi gli argomenti per determinare<br />

le caratteristiche richieste per il valore reale. Inoltre, i termini p= e r= sono facoltativi, purché<br />

gli argomenti precisione erange siano specificati in questa sequenza; il terminep= può essere<br />

omesso se viene specificata soltanto la precisione.<br />

Più precisamente, la funzione SELECTED_REAL_KIND restituisce il numero di kind del più<br />

piccolo valore reale che soddisfa alle caratteristiche richieste oppure -1 se nel processore in uso<br />

non è possibile ottenere la precisione specificata con qualsiasi tipo di dato reale, -2 se non<br />

è possibile ottenere il range specificato con qualsiasi tipo di dato reale, -3 se non è possibile<br />

ottenere né la precisione né il range.<br />

Un esempio di applicazione di questa funzione è dato dal seguente programma di test:<br />

PROGRAM test_select_real<br />

IMPLICIT NONE<br />

INTEGER :: n1, n2, n3, n4, n5, n6, n7<br />

n1 = SELECTED_REAL_KIND(p=6,r=37)<br />

n2 = SELECTED_REAL_KIND(r=100)<br />

n3 = SELECTED_REAL_KIND(p=13,r=200)<br />

n4 = SELECTED_REAL_KIND(p=13)<br />

n5 = SELECTED_REAL_KIND(17)<br />

n6 = SELECTED_REAL_KIND(p=11,r=500)<br />

n7 = SELECTED_REAL_KIND(17,500)<br />

PRINT*, n1,n2,n3,n4,n5,n6,n7<br />

END PROGRAM

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

Saved successfully!

Ooh no, something went wrong!