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.

82 Tipi ed espressioni<br />

Base: 2<br />

Range di esponenti: 37<br />

Epsilon: 1.192093E-07<br />

Spaziatura: 1.192093E-07<br />

Minimo valore: 1.175494E-38<br />

Massimo valore: 3.402823E+38<br />

Tipo REAL in doppia precisione<br />

Kind: 8<br />

Bit significativi: 53<br />

Max esponente: 1024<br />

Min esponente: -1021<br />

Cifre significative: 15<br />

Base: 2<br />

Range di esponenti: 307<br />

Epsilon: 2.22044604925031D-016<br />

Spaziatura: 2.22044604925031D-016<br />

Minimo valore: 2.22507385850720D-308<br />

Massimo valore: 1.79769313486232D+308<br />

Naturalmente, su macchine differenti si possono ottenere risultati differenti. Lo stesso dicasi nel<br />

caso in cui questo programma venisse compilato con un diverso compilatore, in particolare per<br />

quanto riguarda il valore dei numeri di kind che, come è noto, non sono fissati dallo standard<br />

ma lasciati alla scelta dei produttori di compilatori.<br />

Un ulteriore esempio di impiego delle funzioni di questo gruppo potrebbe essere la definizione<br />

dei parametri di kind di interi con differenti dimensioni e di reali di differenti livelli di precisione.<br />

Queste definizioni possono essere efficacemente inserite all’interno di un modulo a fornire, così,<br />

una collezione di parametri ”globali” utilizzabili da diverse unità di programma. Sebbene lo<br />

studio delle unità modulo sarà affrontato solo più avanti, si ritiene comunque utile premettere<br />

questo semplice esempio:<br />

MODULE numeric_kinds<br />

! costanti con nome per interi a 4, 2 e 1 byte<br />

INTEGER, PARAMETER :: &<br />

i4b = SELECTED_INT_KIND(9), &<br />

i2b = SELECTED_INT_KIND(4), &<br />

i1b = SELECTED_INT_KIND(2)<br />

! costanti con nome per reali in singola, doppia e<br />

! quadrupla precisione<br />

INTEGER, PARAMETER :: &<br />

sp = KIND(1.0), &<br />

dp = SELECTED_REAL_KIND(2*PRECISION(1.0_sp)), &<br />

qp = SELECTED_REAL_KIND(2*PRECISION(1.0_dp))<br />

END MODULE numeric_kinds

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

Saved successfully!

Ooh no, something went wrong!