[Gfoss] Grass double precision field

Andrea Peri aperi2007 a gmail.com
Ven 30 Nov 2012 10:19:22 CET


Salve prosieguo il discorso /spiegazione dell'equivoco
con una appendice molto interessante a mio parere.

E anche per esemplificare un assunto per me sempre-verde: "Non esiste
la scelta migliore in assoluto"

Infatti il formato "double" è molto piu'
compatto del formato numeric.
E questo è un vantaggio.
Infatti mentre un double occupa 8 byte, un analogo numero espresso in
numeric occuperebbe
un numero di caratteri superiore.

Pero' il NUMERIC garantisce l' ESATTA archiviazione del numero.
Mentre il double ne garantisce l'archiviazione di una approssimazione.

Questo perche' il formato double segue la specifica FP64, ovvero la
regola mantissa-caratteristica.
http://en.wikipedia.org/wiki/Double_precision
Questo , abbinato al fatto che si usano una notazione binaria, porta
alla conseguenza ultima che
mentre molti numeri sono rappresentabili esattamente, ce ne sono
alcuni (non pochi per la verità)
che sono espressi solo approssimatamente.

Sono emsepi di questi numeri non esattamente rappresentabili in double
notation i seguenti:

0.01 , espresso in singola precisione (float) diviene
0.009999999776482582092285156250

http://www.binaryconvert.com/

0.1
la sua rappresentazione in binario a doppia precisione 64 bit di
precision (FP64 o double precision) è la seguente:

(0.1)10 -> (0x3FB999999999999A)16 -> (00111111 10111001 10011001
10011001 10011001 10011001 10011001 10011010)2

La quale riportata in decimale esprime il valore seguente:

1.00000000000000005551115123126E-1

cioe'
0.100000000000000005551115123126

Quindi esprimere il numero 0.1 in doppia precisione porta a compiere
un errore di
0.00000000000000005551115123126

Che sia tanto o poco dipende dal contesto in cui si va a usare tale numero.

In certe situazione (leggi coordinate di un vertice ) potrebbe anche
determinare un errore importante.
Ma anche in un campo di un DBF potrebbe esserlo.
Certo se si sta' esprimendo una quota o un qualcosa di altro che ha
gia' un suo oerrore di misurazione allora si puo' anche trascurare, ma
in altri contesti potrebbe non essere accettabile.
Per questo esiste ala notazione NUMERIC dove scrivendo semplicemente

Numeric 2,2  si impegna 4 caratteri e si memorizza ESATTAMENTE il valore 0.1

Saluti,


-- 
-----------------
Andrea Peri
. . . . . . . . .
qwerty àèìòù
-----------------


Maggiori informazioni sulla lista Gfoss