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.

5.12 Procedure intrinseche 267<br />

REAL time_begin, time_end<br />

...<br />

CALL CPU_TIME(time_begin)<br />

...<br />

CALL CPU_TIME(time_end)<br />

PRINT*, "<strong>Il</strong> tempo impiegato dalle operazioni e’ stato: ", &<br />

time_begin - time_end, " secondi"<br />

Lo scopo principale per cui è stata introdotta questa procedura è quello di permettere di confrontare<br />

algoritmi differenti sul medesimo computer oppure di scoprire quale ramo di programma<br />

è più costoso in termini di sforzo di calcolo.<br />

Si noti che su computer con diverse CPU, il parametro TIME può essere implementato come<br />

un array i cui elementi contengono i tempi di ciascun processore.<br />

RANDOM_NUMBER(HARVEST)<br />

Questa subroutine consente di generare un valore reale pseudo-random nell’intervallo [0-1].<br />

a partire da uno starting point rappresentato da un vettore di interi. <strong>Il</strong> parametro formale<br />

HARVEST ha attributo INTENT(OUT) e può essere un valore scalare oppure un array di tipo REAL<br />

<strong>Il</strong> valore (o la sequenza) random viene prodotta a partire da un punto di partenza (seed)<br />

che, se non viene imposto tramite la subroutine RANDOM_SEED, viene posto pari ad un valore<br />

dipendente dal processore.<br />

<strong>Il</strong> seguente frammento di programma produce un valore ed un array di5×5 elementi pseudorandom:<br />

REAL :: x, y(5,5)<br />

! Assegna ad x un un valore pseudo-random<br />

CALL RANDOM_NUMBER(HARVEST=x)<br />

! Produce un array di 5x5 valori pseudo-random<br />

CALL RANDOM_NUMBER(y)<br />

RANDOM_SEED([SIZE],[PUT],[GET])<br />

Questa subroutine serve a ”resettare” (o ad avere informazioni circa) il generatore di numeri<br />

random. I suoi parametri formali hanno il seguente significato:<br />

• SIZE: è uno scalare di tipo INTEGER e fornisce il numero di interi che il processore utilizza<br />

come starting point. Ha attributo INTENT(OUT).<br />

• PUT: è un array di tipo INTEGER attraverso cui l’utente può fornire uno starting point al<br />

generatore di numeri random. Ha attributo INTENT(IN).<br />

• GET: è un array di tipo INTEGER che contiene il valore corrente dello starting point. Ha<br />

attributo INTENT(OUT).

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

Saved successfully!

Ooh no, something went wrong!