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

Reply via email to