The problem is not comparisons the problem is when I do something like this: CREATE TABLE tb (a REAL); INSERT INTO tb (a) VALUES(0); UPDATE tb SET a = a + 5.45; UPDATE tb SET a = a + 16.9;
SELECT a FROM tb; Gives visually right answer: 22.35 But putting on a double variable gives me 22.3499948593433 (something like that) and when declaring double a = 22.35 => gdb give me 22.3499999999999 Em 08/03/2013, às 14:11, Michael Black <mdblac...@yahoo.com> escreveu: > Nobody should expect float comparisons like that to work. > If they do they're asking for trouble. > All you're seeing is what the database is letting you see. Their "0" is not > really "0". > > Try this in your friendly C compiler > main() > { > double d = 22.35-(5.45+16.9); > printf("%f\n",d); > printf("%g\n",d); > printf("%e\n",d); > } > On both MS Visual C and gcc on a Linux system: > 0.000000 > 3.55271e-015 > 3.552714e-015 > > -----Original Message----- > From: sqlite-users-boun...@sqlite.org > [mailto:sqlite-users-boun...@sqlite.org] On Behalf Of Israel Lins > Albuquerque > Sent: Thursday, March 07, 2013 12:04 PM > To: sqlite-users@sqlite.org > Subject: [sqlite] Bug on real operations > > An example speaks more than words: > > Execute this: > SELECT 22.35 - (5.45 + 16.9), 22.35 = (5.45 + 16.9), (5.45 + 16.9) - 22.35; > > The expected result on almost databases is: > 0.0, true or 1, 0.0 > > But in sqlite for some reason they are: > 3.5527136788005e-15, 0, -3.5527136788005e-15 > > I thing this can be a bug on calculation of doubles. > > Regards, > Israel Lins Albuquerque > _______________________________________________ > 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