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.

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!