Re: [HACKERS] 123.45 - 123 = 0.45 - Mailing list pgsql-hackers

From David Hartwig
Subject Re: [HACKERS] 123.45 - 123 = 0.45
Date
Msg-id 36767DBD.129AAA1F@insightdist.com
Whole thread Raw
In response to Re: [HACKERS] 123.45 - 123 = 0.45  (Bruce Momjian <maillist@candle.pha.pa.us>)
Responses Re: [HACKERS] 123.45 - 123 = 0.45  (Bruce Momjian <maillist@candle.pha.pa.us>)
List pgsql-hackers
Try this:

#include <stdio.h>

main()
{
double f1 = 123.45;
double f2 = 123.00;
double r;
   r = f1 - f2;   printf("%0.15f  %0.15f  %0.15f\n", f1, f2, r);
}

Internal representation of 123.45 is not exact.   In the conversion to
binary, an irrational number is created which is truncated to 64 bits.


Bruce Momjian wrote:

> > Hi all,
> >
> > I tried to divide 123.45 by 123.00 but PostgreSQL gives me a wrong
> > result:
> >
> > hygea=> select 123.45 - 123.00;
> >          ?column?
> > -----------------
> > 0.450000000000003
> > (1 row)
> >
>
> Wow, I get the same thing here.
>
> Even this doesn't work:
>
>         test=> select float8(123.45) - float8(123.00);
>                  ?column?
>         -----------------
>         0.450000000000003
>         (1 row)
>
> Now constants are automatically promoted to float8, so I expected the
> same results, but what is going on here?
>
> --
>   Bruce Momjian                        |  http://www.op.net/~candle
>   maillist@candle.pha.pa.us            |  (610) 853-3000
>   +  If your life is a hard drive,     |  830 Blythe Avenue
>   +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026



pgsql-hackers by date:

Previous
From: Vince Vielhaber
Date:
Subject: Re: [HACKERS] 123.45 - 123 = 0.45
Next
From: Sferacarta Software
Date:
Subject: Re[2]: [HACKERS] 123.45 - 123 = 0.45