Note that even when the column is declared with no affinity that NaNs are stored as null. Other than NaN, all other IEEE754 double values (including subnormals and +/- Inf) seem to round-trip correctly through the bind_double and column_double interface ...
--- The fact that there's a Highway to Hell but only a Stairway to Heaven says a lot about anticipated traffic volume. >-----Original Message----- >From: sqlite-users [mailto:sqlite-users- >boun...@mailinglists.sqlite.org] On Behalf Of Donald Shepherd >Sent: Thursday, 13 June, 2019 15:59 >To: General Discussion of SQLite Database >Subject: Re: [sqlite] [SPAM?] Re: [EXTERNAL] Re: Should SQLite >distinguish between +0.0 and -0.0 on output? > >On Fri., 14 Jun. 2019, 7:43 am Keith Medcalf, <kmedc...@dessus.com> >wrote: > >> On Thursday, 13 June, 2019 15:21, Donald Shepherd < >> donald.sheph...@gmail.com> wrote: >> >> >On Fri, 14 Jun 2019 at 7:11 am, Richard Hipp <d...@sqlite.org> >wrote: >> >> >> On 6/13/19, Donald Shepherd <donald.sheph...@gmail.com> wrote: >> >> >>> Given there's been numerous comments to the effect that SQLite >> >>> now supports -0.0 storing and retrieval other than printing, >> >>> I'm curious which version this was implemented in as I wouldn't >> >>> mind removing my custom code when we move to a SQLite version >> >>> with this improvement. >> >> >> SQLite version 3.0.0 from 2004-06-17. >> >> >When I reported that testing on 3.8.7.2 stored -0.0 but retrieved >> >0.0, your comment on this list was that "SQLite converts integer >> >floating point values to actual integers for storage (because that >> >takes up less space on disk) and then converts back to double upon >> >retrieval. That round-trip would change -0.0 into +0.0." >> >> >I was wondering when this changed? >> >> >That doesn't seem like "supporting -0.0 storing and retrieval" >since >> >3.0.0.0 if it was previously being modified to another value >during >> >storage, losing the sign in the process. >> >> Actually, it depends on whether the database column has real >affinity or >> not. If it has no affinity then the value is not "converted". >> >> If you declare the database column thusly: >> >> create table x(x); -- column x has no affinity >> >> then storing a double -0.0 in the column either via the statement >INSERT >> INTO X VALUES (-0.0); or through binding a double containing -0.0 >as a >> parameter to INSERT INTO X VALUES (?) results in the double -0.0 >being >> stored in the database and retrieved with column_double against the >query >> SELECT X FROM X; >> >> However, if you declare the database column thusly: >> >> create table x(x real); -- column x has real affinity >> >> then all manner of attempting to store -0.0, 0, 0.0 results in >> column_double retrieving 0.0 (stripping the sign) since what is >actually >> stored is the two's complement integer 0 which does not have a sign >(or >> rather, the sign is +ve). >> > >Thanks, that's an interesting wrinkle I might be able to use. > >Regards, >Donald Shepherd. > >> >_______________________________________________ >sqlite-users mailing list >sqlite-users@mailinglists.sqlite.org >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users