<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
Buongiorno a tutti,<br>
<br>
questa discussione sul formato dei dati č molto interessante, mi ci sono
 imbattuto spesso e nella maggior parte dei casi ho abbozzato. Sarebbe 
molto bello ed utile creare una pagina con le osservazioni di Andrea ed 
Alessandro, su GFOSS.it o altrove, dove pił opportuno.<br>
<br>
Non so dove nč come metterci le mani, ma se volete (magari non avete tempo o voglia) posso provare a farlo anche io :)<br><br>A proposito, sto seguendo un tesista nell'aggiornamento del database nazionale dei siti minerari (un progetto ISPRA - Universitą di Bologna), che oltre all'implementazione di nuove funzionalitą specifiche prevede il passaggio da MS Access a SQLite / Spatialite (yeah!!!), con l'obiettivo finale di renderlo accessibile tramite webgis, QGIS, tablet, ecc, ecc (un passo alla volta :)).<br><br>Dopo una lunga (ed in parte sofferta) analisi dei data type in SQLite siamo arrivati alla conclusione che i dati numerici nelle tabelle avranno sempre diverse cifre decimali, anche quando non necessarie (in termini di precisione del dato), e che se vogliamo visualizzare un dato "arrorondato" basta usare un'opportuna query SQL. E? tutto giusto o sto sbagliando un bel po' di cose?<br>
<br>
Complimenti a tutti e buona giornata,<br>
<br>
Carlo<br>
<br>
<div class="moz-cite-prefix">Il 30/11/2012 11:04, a.furieri@lqt.it ha scritto:<br>
</div>
<blockquote cite="mid:%3C968e4bd3b509b24c2b87be7fca02deb4@lqt.it%3E" type="cite">On Fri, 30 Nov 2012 10:19:22 +0100, Andrea Peri wrote:
  <br>
  <blockquote type="cite">Questo , abbinato al fatto che si usano una notazione binaria, porta
<br>alla conseguenza ultima che mentre molti numeri sono rappresentabili
<br>esattamente, ce ne sono alcuni (non pochi per la veritą) che sono 
espressi
<br>solo approssimatamente.
<br>
<br>Sono emsepi di questi numeri non esattamente rappresentabili in 
double
<br>notation i seguenti:
<br>
<br>0.01 , espresso in singola precisione (float) diviene
<br>0.009999999776482582092285156250
<br>
<br>http://www.binaryconvert.com/
<br>
<br>0.1
<br>la sua rappresentazione in binario a doppia precisione 64 bit di
<br>precision (FP64 o double precision) č la seguente:
<br>
<br>(0.1)10 -> (0x3FB999999999999A)16 -> (00111111 10111001 10011001
<br>10011001 10011001 10011001 10011001 10011010)2
<br>
<br>La quale riportata in decimale esprime il valore seguente:
<br>
<br>1.00000000000000005551115123126E-1
<br>
<br>cioe'
<br>0.100000000000000005551115123126
<br>
<br></blockquote>

  <br>
Andrea,
  <br>

  <br>
le tue sono Sante Parole: aggiungo solo che quanto tu dici vale
  <br>
solo in un idilliaco mondo ideale del tutto teorico.
  <br>
la dura realta' del mondo fisico e' ancora peggiore :-D
  <br>

  <br>
perche' occorre mettere nel conto le diverse implementazioni delle
  <br>
librerie di runtime (che sono sempre e comunque alla base di tutto
  <br>
quanto il sw, a prescindere del linguaggio usato).
  <br>
e qua si scopre inevitabilmente che diverse versioni e/o diverse
  <br>
implementazioni forniscono risultati leggermente differenti.
  <br>

  <br>
giusto per fare un banale esempio in C:
  <br>

  <br>
...
  <br>
double x = atof("1.2");
  <br>
printf("%1.16f\n", x);
  <br>
...
  <br>

  <br>
a seconda della piattaforma che usi scoprirai che puoi ottenere
  <br>
(piu' o meno a casaccio):
  <br>
1.2000000000000000
  <br>
1.2000000000000001
  <br>
1.1999999999999999
  <br>

  <br>
te lo dico con assoluta certezza di causa, visto che ho perso le
  <br>
ultime settimane per mettere a punto la test-coverage di splite.
  <br>

  <br>
e ti assicuro che ho dovuto sudare le mitiche sette camicie prima
  <br>
di riuscire faticosamente a mettere a punto una serie di test numerici
  <br>
(coordinate) che tornassero sempre e comunque gli stessi identici
  <br>
risultati su Debian, Fedora e WinOZ sia a 32 che a 64 bit.
  <br>

  <br>
con un'ultima insospettata regressione finale quando poi ho fatto
  <br>
girare tutta quanta la test-coverage sotto Valgrind, ed ho cosi'
  <br>
inopinatamente scoperto che in questo ambiente di test alcuni
  <br>
testcases ritornano ancora altri valori differenti :-P
  <br>
(non del tutto sorprendente, visto che Valgrind in pratica non
  <br>
usa la CPU fisica ma usa una macchina virtuale sua propria che
  <br>
emula i codici macchina x86).
  <br>

  <br>
ciao Sandro
  <br>

  <br>

  <br>

  <br>

  <br>

  <br>


</blockquote>
                                          </div></body>
</html>