Re: Fortran e precisione nei calcoli

From: Giorgio Pastore <pastgio_at_univ.trieste.it>
Date: Thu, 24 Apr 2003 00:26:44 +0200

H A L wrote:


...
> Se stampo a monitor i risultati degli scarti per ogni singolo
> valore sperimentale, vedo che i calcoli hanno una pesante
> approssimazione, per esempio:
>
>
> Valore Sperimentale Media Scarto
> 6.7 6.6 9.999971E-02
> 6.3 6.6 -0.2999999
> 6.6 6.6 -0.6000001
> 7.0 6.6 0.3999999

Cosa intendi esattamente per "pesante approssimazione" ? il fatto che
ottieni -0.2999999 invece di -0.3 ?

Un altro parametro fondamentale per poterti dare un suggerimento e' il
numero di dati con cui hai a che fare.

Il punto e' che con la precisione che stai usando (32 bit) non hai piu'
di circa 7 cifre significative decimali esatte per ogni variabile e il
numero di operazioni floating point influenza l' errore di round off finale.
Non e' detto che sia necessario aumentare la precisione. Pero' ci
vorrebe qualche dettaglio in piu'.

...
> Allora, chiedo, c'� un modo per aumentare le cifre dopo la virgola?
> Basterebbero anche 12 cifre decimali, credo, per abbattere in buona
> misura l'approssimazione (forse KIND=8, o qualcosa di simile?). Oppure,
> c'� un modo per formattare i valori alla approssimazione voluta?

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).

Il REAL*8 NON e' Fortran 90 ma la versione IBM-style della doppia
precisione del fortran 77. Un compilatore F90 potrebbe capirla ma se non
vuoi tornare al fortran del passato, resta con un sano Kind (che ti
semplifica la vita anche per le costanti).


> PS: Scusate se posto sia in *.fisica c he in *.matematica, ma non sono
> sicuro di chi sarebbe stata la competenza...

E' un problema interdisciplinare e i fisici dovrebbero essere ben
piazzati per aiutarti.


Giorgio
Received on Thu Apr 24 2003 - 00:26:44 CEST

This archive was generated by hypermail 2.3.0 : Sat Jan 04 2025 - 04:23:41 CET