Thread: Divide a float4 by 1 - what is going on???????

Divide a float4 by 1 - what is going on???????

From
Daniel Schuchardt
Date:
Hi people,

can anyone explain what is going on here : ?

CIMSOFT=# CREATE TEMP TABLE test (n1 FLOAT4);
CREATE TABLE
CIMSOFT=# INSERT INTO test (n1) VALUES (2.456677);
INSERT 6571521 1
CIMSOFT=# SELECT * FROM test;
   n1
---------
 2.45668
(1 row)

CIMSOFT=# SELECT n1/1 FROM test;
     ?column?
------------------
 2.45667695999146
(1 row)

Why I get so many digits by a division with one? Anybody should have
learned that everything / 1 = everything ;-)

Thnx,
Daniel

PS :

PostgreSQL 8.0.0 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2
(mingw

Re: Divide a float4 by 1 - what is going on???????

From
"Dann Corbit"
Date:
Float provides 6-7 digits of precision.
I see nothing surprising down below.

> -----Original Message-----
> From: pgsql-general-owner@postgresql.org [mailto:pgsql-general-
> owner@postgresql.org] On Behalf Of Daniel Schuchardt
> Sent: Friday, September 16, 2005 5:13 PM
> To: pgsql-general@postgresql.org
> Subject: [GENERAL] Divide a float4 by 1 - what is going on???????
>
> Hi people,
>
> can anyone explain what is going on here : ?
>
> CIMSOFT=# CREATE TEMP TABLE test (n1 FLOAT4);
> CREATE TABLE
> CIMSOFT=# INSERT INTO test (n1) VALUES (2.456677);
> INSERT 6571521 1
> CIMSOFT=# SELECT * FROM test;
>    n1
> ---------
>  2.45668
> (1 row)
>
> CIMSOFT=# SELECT n1/1 FROM test;
>      ?column?
> ------------------
>  2.45667695999146
> (1 row)
>
> Why I get so many digits by a division with one? Anybody should have
> learned that everything / 1 = everything ;-)
>
> Thnx,
> Daniel
>
> PS :
>
> PostgreSQL 8.0.0 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC)
3.4.2
> (mingw
>
> ---------------------------(end of
broadcast)---------------------------
> TIP 4: Have you searched our list archives?
>
>                http://archives.postgresql.org

Re: Divide a float4 by 1 - what is going on???????

From
Michael Fuhr
Date:
On Sat, Sep 17, 2005 at 02:12:45AM +0200, Daniel Schuchardt wrote:
> CIMSOFT=# SELECT n1/1 FROM test;
>     ?column?
> ------------------
> 2.45667695999146
> (1 row)
>
> Why I get so many digits by a division with one? Anybody should have
> learned that everything / 1 = everything ;-)

Looks like the division is being done in double precision (float8)
and you're seeing the effects of an inexact representation.

test=> SELECT 2.456677::real / 1;
     ?column?
------------------
 2.45667695999146
(1 row)

test=> SELECT 2.456677::real / 1::real;
 ?column?
----------
  2.45668
(1 row)

--
Michael Fuhr