H A L, in data Thu, 24 Apr 2003 18:56:27 GMT, ha scritto in
"it.scienza.fisica" nel thread "Re: Fortran e precisione nei calcoli":
> Esatto! Mi rendo conto che possa sembrare poco, ma alla fine l'effetto
> si sente eccome!!!
> Insomma, non � un calcolo difficile: 6.3 - 6.6= - 0.3 non -
> 0,2999999 ma non me lo fa....
Premetto che sono "rimasto" al FORTRAN 77, con cui ho programmato parecchio
negli anni '80, ma non credo che su questo fronte le cose siano cambiate
molto.
Quando ragioni con i reali, indipendentemente dalla precisione che ti serve,
devi ricordarti sempre che "uno pi� uno fa circa due". Questo � legato alla
rappresentazione binaria interna e non ci puoi fare nulla.
Ad esempio � pericolosissimo fare test del tipo IF (A .EQ. B) THEN...
Conviene quindi definire un PARAMETER EPSILON pari al valore pi� piccolo
rappresentabile nel livello di precisione prescelto (REAL, DOUBLE PRECISION
o pi�) e poi impostare:
IF (DMOD(A-B) .LE. EPSILON) THEN...
DMOD vale se A e B sono DOUBLE PRECISION (cio� REAL*8), mentre se A e B sono
REAL (cio� REAL*4) devi invece usare AMOD.
Per inciso, questi problemi ci sono anche con le banali calcolatrici da
pochi soldi, tipo euroconvertitori, per intendersi.
Se fai 10 / 3 * 3 otterrai un bel 9,9999999 sul display.
Invece se usi calcolatrici pi� evolute, tipo quelle scientifiche, invece ti
troverai di nuovo 10 come risposta.
Questo perch� queste calcolatrici hanno internamente tre cifre in pi� di
quelle che compaiono suil display. Alla fine del calcolo, prima di essere
messo sul display, il risultato viene arrotondato con il sistema 4/5
buttando via le tre cifre invisibili.
Ciao!
--
Roberto Rosoni
<roberto.rosoni_at_liberoLock.it> (Remove the Lock in your replies)
"Caro, perch� non giochi un po' a calcio coi bambini?" "Perch� rimbalzano male."
Received on Sat Apr 26 2003 - 01:37:30 CEST