Mi spiace per il ritardo con cui rispondo ma sono stato via qualche giorno.
H A L wrote:
...
> Insomma, non � un calcolo difficile: 6.3 - 6.6= - 0.3 non -
> 0,2999999 ma non me lo fa....
Beh, la differenza tra 0.3 e 0.29999999 e' 0.00000001, ovvero circa tre
parti su 10 milioni. Pensi che i tuoi risultati dipenderanno in modo
cruciale da questa differenza ? Cosa stai misurando, il momento anomalo
dell' elettrone ? :-)
La ragione e' che l' aritmetica del computer e' binaria e questo
comporta alcuni risultati non ovvi lavorando con numeri decimali che in
base 10 hanno una rappresentazione finita: p. es. 0.3 (base 10) diviene
0.0100110011001.... cioe' 0.0<1001> dove le cifre tra segni <..>
indicano un periodo che si ripete all' infinito.
Questo implica che su qualsiasi computer il valore di 0.3 NON potra' mai
essre rappresentato esattamente ma incorrera' in un errore ( di
arrotondamento o di troncamento) tantp piu' piccolo quanti piu' bit sono
riservati alla mantissa dei numeri reali. Una volta capito pero' che l'
errore c'e' ed e' inevitabile (ma questo non vuol dire che 1+1 non fa 2,
sia 1 sia 2 sono rappresentabili esattamente in base 2 7) tutto sta
nel capire quale e' la precisione realmente richiesta dai calcoli che si
sta nno facendo.
>
>
>>Un altro parametro fondamentale per poterti dare un suggerimento e' il
>>numero di dati con cui hai a che fare.
>
>
> Ho due serie da 150 misurazioni ciascuna, di cui devo calcolare media
> aritmetica, scarto medio, scarto quadratico medio, istogramma degli
> scarti, ecc...
Con 150 dati e se gli scarti sono dell' ordine di quelli che hai dato
non vedo problemi a lavorare in precisione semplice. Alla fin fine quale
e' il numero di cifre significative esatte dei tuoi dati ?
Una prova indiretta la puoi fare molto semplicemente: se il roundoff e'
una sorgente importante di errore nel tuo conto, formule algebricamente
equivalenti potrebbero dare numeri diversi. P. es potresti calcolare la
varianza come somma_i (x_i-<x>)**2 oppure come somma_i x_i**2 - N
<x>**2. Se vedi differenze significative e' il caso di cominciare a
preoccuparsi ma se restano sulla settima cifra significativa decimale
direi proprio di no (sempre che non sia la famosa misura del momento
anomalo...)
>
>
>>Il suggerimento di Giacomo e' il piu' portabile e sicuro. Anche se, in
>>un sistema in cui il kind di default e' 4, 8 dara' quasi sicuramente la
>>precisione "doppia" (64 bit, circa 15 cifre significative decimali esatte).
>
>
> Ok, quindi semplicemente all'inizializzazione pongo:
> REAL (KIND=8)::
Postilla: non seguire il suggerimento per qunto riguarda il valore di Pi
greco: se si lavora con 64 bit si hanno circa 15 cifre esatte. Dare la
cosatnte con solo 10 e' un contro senso (e riserva brutte sorprese
quando si calcola p.es. il seno di pi/2 )
> In che senso per le costanti? I PARAMETER non li assegni tu all'inizio
> quando inizializzi il tutto?
Le costanti non sono solo quelle dei parameter. Se hai un' istruzione
come :
a = 2.0 * acos ( -1.0 )
hai 2 costanti: 2.0 e -1.0 . Queste sono del kind di default (32 bit in
genere) quindi non puoi aspettarti per a un' approssimazione a 2 Pi
migliore di una a 7 cifre significative. Nel Fortran 77 uno era
obbligato a modificare le costanti in 2.0D0 e -1.0D0 per dire che
andavano considerate a 64 bit. In F90 appiccichi il kind ad ogni
costante e poi modifichi solo il suo valore all' inizio del programma
( 2.0_kk, -1.0_kk ).
>
> Infine (prometto!!) c'� qualche dispensa, anche in inglese, su cui poter
> studiare un po' di teoria? Un pdf da scaricare su Fortran... Mi hanno
> consigliato una dispensa di Liverpool University, ma non ho trovato
> nulla di scaricabile... Solo una completa guida html...
Dipende da dove parti. Per chi viene dal mondo del f77 c'e' un tutorial
on line con anche una versione scaricabile zippata a:
http://www.nsc.liu.se/~boein/f77to90/f77to90.html
Per i tuoi dubbi sulla precisione consiglierei pero' il link su "The
Perils of Floating Point", Bruce M. Bush nella pagina
http://www.lahey.com/other.htm
che e' una buona miniera di altre informazioni sul fortran.
Se hai richieste piu' precise, fai pure un fischio...
Ciao
Giorgio
Received on Tue Apr 29 2003 - 23:29:45 CEST