I don't see your "problem". 22.35 cannot be accurately represented in
floating point.
It's just some display systems will hide it from you.
What exactly is it that you can't do or that is coming out wrong?
Stop trying to make sense out of comparing floats -- it's a bad idea.
main()
{
float f=(5.45f+16.9f);
double d=(5.45+16.9);
printf("%g\n",f);
printf("%g\n",d);
printf("%15e\n",f);
printf("%15e\n",d);
}
(gdb) p f
$1 = 22.3499985
(gdb) p d
$2 = 22.349999999999998
(gdb) cont
Continuing.
22.35
22.35
2.235000e+001
2.235000e+001
-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Israel Lins
Albuquerque
Sent: Friday, March 08, 2013 12:07 PM
To: General Discussion of SQLite Database
Subject: Re: [sqlite] Bug on real operations
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 <[email protected]> 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: [email protected]
> [mailto:[email protected]] On Behalf Of Israel Lins
> Albuquerque
> Sent: Thursday, March 07, 2013 12:04 PM
> To: [email protected]
> 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
> [email protected]
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users