Found the problem.

At sqlite3.c 19883 if( precision<0 ) precision = 6;         /* Set default 
precision */

precision has a value of 15.  It should be 14 or less.  Don't know where it is 
getting this value from however.



---
()  ascii ribbon campaign against html e-mail
/\  www.asciiribbon.org


> -----Original Message-----
> From: sqlite-users-boun...@sqlite.org [mailto:sqlite-users-
> boun...@sqlite.org] On Behalf Of Keith Medcalf
> Sent: Saturday, 16 June, 2012 13:28
> To: General Discussion of SQLite Database
> Subject: Re: [sqlite] VERY weird rounding error
> 
> 
> Are you using the "same machine code" or merely "the same source code"?
> 
> The sqlite3 shell.c always asks for the results back converted to text.
> 
> Does your "other" shell ask for the results as "text" or as a double?
> 
> ...>python
> Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on
> win32
> Type "help", "copyright", "credits" or "license" for more information.
> >>> import apsw
> >>> import apswrow
> >>> import math
> >>> db = apsw.Connection(':memory:')
> >>> cr = db.cursor()
> >>> r1 = cr.execute('select 99990.1 as double;').next()
> >>> r2 = cr.execute('select cast(99990.1 as text) as textval;').next()
> 
> >>> r1
> Row(double=99990.1)
> 
> >>> type(r1[0])
> <type 'float'>
> 
> >>> math.frexp(r1[0])
> (0.7628639221191407, 17)
> 
> >>> math.frexp(float('99990.1'))
> (0.7628639221191407, 17)
> 
> >>> r2
> Row(textval=u'99990.1000000001')
> >>> type(r2[0])
> <type 'unicode'>
> 
> >>> math.frexp(float(r2[0]))
> (0.7628639221191413, 17)
> 
> ...>sqlite3d
> SQLite version 3.7.13 2012-06-11 02:05:22
> Enter ".help" for instructions
> Enter SQL statements terminated with a ";"
> sqlite> select 99990.1;
> 99990.1000000001
> sqlite> select cast(99990.1 as double);
> 99990.1000000001
> sqlite> select cast(99990.1 as text);
> 99990.1000000001
> sqlite> select 99990.1000000001;
> 99990.1000000001
> 
> My conclusion is that the conversion from floating point to text in the
> SQLite database engine is inexact and designed as a convenience function
> only.  However, it is consistent. My recommendation would be that if you want
> "text" then use "text" everywhere.  If you want floating point, then use
> floating point everywhere.  You should not expect that wild conversions
> should produce the results you want.
> 
> ---
> ()  ascii ribbon campaign against html e-mail
> /\  www.asciiribbon.org
> 
> 
> > -----Original Message-----
> > From: sqlite-users-boun...@sqlite.org [mailto:sqlite-users-
> > boun...@sqlite.org] On Behalf Of Etienne
> > Sent: Saturday, 16 June, 2012 11:32
> > To: General Discussion of SQLite Database
> > Subject: [sqlite] VERY weird rounding error
> >
> > Hi Simon,
> >
> > Once again, I really do not care of the accuracy.
> >
> > I KNOW 0.1 CAN NOT BE STORED EXACTLY IN A REAL VARIABLE.
> >
> > I just try to figure out why the SAME CODE (sqlite3 library) with the SAME
> > INPUT gives DIFFERENT RESULTS (no matter how accurate/exact they
> individually
> > are!) when linked to different shells.
> >
> >
> > Etienne
> >
> >
> > ----- Original message -----
> > From: Simon Slavin <slav...@bigfraud.org>
> > To: General Discussion of SQLite Database <sqlite-users@sqlite.org>
> > Subject: Re: [sqlite] VERY weird rounding error: details
> > Date: Sat, 16 Jun 2012 18:13:29 +0100
> >
> >
> > On 16 Jun 2012, at 5:41pm, Etienne <ejlist-sql...@yahoo.fr> wrote:
> >
> > > 19913:   realvalue *= 0.1;
> >
> > This operation cannot be correctly executed while holding the value in a
> real
> > variable.  You will get inconsistent results.  Please read the reference I
> > gave earlier for an explanation of why it is pointless trying to get
> perfect
> > accuracy while handling a value of 0.1 in a real variable.
> >
> > Simon.
> > _______________________________________________
> > sqlite-users mailing list
> > sqlite-users@sqlite.org
> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> > _______________________________________________
> > sqlite-users mailing list
> > sqlite-users@sqlite.org
> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> 
> 
> 
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users



_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to