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.

50 Tipi ed espressioni<br />

Se, ad esempio, l’input del programma fosse:<br />

(2.500, 8.400)<br />

(.500, 9.600)<br />

il corrispondente output sarebbe:<br />

(-5.000000,10.00000)<br />

1.7 Tipi di dati parametrizzati<br />

Uno dei problemi più seri che affiggono i programmatori che sviluppano software scientifico è<br />

rappresentato dalla cosiddetta portabilità numerica; con questa dicitura si indica il fatto che<br />

la precisione ed il range di un stesso tipo di dati potrebbe essere differente da processore a<br />

processore. Ad esempio, su molte installazioni un valore di tipo REAL in singola precisione<br />

occupa 32 bit mentre un valore in doppia precisione ne occupa 64, su altre macchine, invece, i<br />

valori in singola precisione usano 64 bit mentre quelli in doppia precisione ne usano 128. Questo<br />

significa, ad esempio, che ottenere lo stesso risultato che richiede soltanto la singola precisione<br />

su un computer potrebbe richiedere l’impiego di dati in doppia precisione su un altro. Questo<br />

semplice esempio mostra quanto delicato possa essere il trasferimento di un programma da un<br />

computer ad un altro e come i termini singola precisione e doppia precisione non debbano essere<br />

concepiti come concetti definiti in maniera ”esatta”.<br />

Uno degli obiettivi del <strong>Fortran</strong> <strong>90</strong>/<strong>95</strong> è stato quello di superare tale problema di portabilità:<br />

il linguaggio, infatti, implementa un meccanismo (portabile) di scelta della precisione e<br />

supporta tipi che possono essere parametrizzati a mezzo di un valore di kind. <strong>Il</strong> valore di kind<br />

viene usato per scegliere un modello di rappresentazione per un tipo e, relativamente ai soli<br />

tipi numerici, può essere specificato in termini della precisione richiesta. Un processore può<br />

supportare diverse precisioni (o rappresentazioni) di dati di tipo INTEGER, REAL e COMPLEX,<br />

differenti set di CHARACTER (ad esempio, caratteri arabi o cirillici, notazioni musicali etc.) e<br />

modi diversi di rappresentare gli oggetti di tipo LOGICAL.<br />

In <strong>Fortran</strong> a ciascuno dei cinque tipi di dati intrinseci (INTEGER, REAL, COMPLEX, LOGICAL,<br />

CHARACTER) è associato un valore intero non negativo chiamato parametro di kind. E’ previsto<br />

che un processore supporti almeno due valori di kind per i tipi REAL e COMPLEX ed almeno uno<br />

per i tipi INTEGER, LOGICAL e CHARACTER.<br />

Un esempio di ”parametrizzazione” di un tipo intrinseco é:<br />

INTEGER(KIND=1) :: ik1<br />

REAL(KIND=4) :: rk4<br />

I parametri di kind corrispondono alle differenti ”precisioni” supportate dal compilatore.<br />

Assegnare esplicitamente un appropriato parametro di kind a ciascun tipo di dato è ancora<br />

una soluzione non portabile in quanto uno stesso valore di kind potrà corrispondere, su macchine<br />

differenti, a differenti livelli di precisione. Tuttavia, relativamente ai soli tipi numerici, il<br />

linguaggio mette a disposizione un meccanismo di selezione del valore di kind sulla base della<br />

precisione desiderata. Di ciò si parlerà diffusamente nei prossimi sottoparagrafi nei quali si<br />

specializzerà il discorso relativamente a ciascuno dei tipi intrinseci del <strong>Fortran</strong>.

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

Saved successfully!

Ooh no, something went wrong!