Re: float output precision questions

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: Pedro Miguel Frazao Fernandes Ferreira <pfrazao(at)ualg(dot)pt>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: float output precision questions
Date: 2002-10-29 18:14:51
Message-ID: 200210291814.g9TIEpn10671@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


TODO has:

o Add SET REAL_FORMAT and SET DOUBLE_PRECISION_FORMAT
using printf args

so we have not implemented it yet.

---------------------------------------------------------------------------

Pedro Miguel Frazao Fernandes Ferreira wrote:
> Hi All,
>
> I wrote a Matlab interface to PostgreSQL based on libpq. It is working
> fine, supports multiple connections, supports all data types and arrays.
> It is a C program to do the interface and some Matlab wrapper functions
> around it to do the job at application level.
>
> Matlab has an ODBC toolbox but we dont want to buy it since the
> interface does the job and we have been using PostgreSQL for long time.
> We want to use PostgreSQl to store numeric data from simulation,
> computation and data acquisition sources. Basically a big bunch of float
> numbers.
>
> There is still one problem, regarding float output formatting in querys
> and dumps, which essential for this type of application.
>
> If I have a float8 field (named real8 below) in a table and insert the
> following,
>
> insert into test(real8) values (4503599627370496);
> INSERT 21192 1
>
> A select produces,
>
> select real8 from test;
> real8
> ---------------------
> 4.5035996273705e+15
> (1 row)
>
> This is the string I would get from libpq's PQgetvalue(). PQftype()
> correctly returns float8. pg_dump produces the same result. If I convert
> PQgetvalue() to a C double I wont get the same number I inserted. If I
> do a restore from a dump I also wont have the same number. I can see
> that the original number is correctly stored because,
>
> select to_char(real8,'9999999999999999999.99999') from test;
> to_char
> ----------------------
> 4503599627370496
> (1 row)
>
> This way PQftype wont tell this is a float8.
>
> Is there a way to set query output precision to maximum precision ?
> For the type of application I mentioned this is crucial. People want to
> get the 'same' numbers, from querys or dumps, as they inserted them.
>
> Matlab has a toolbox fucntion, claiming maximum precision, to convert
> from its double type (PostgreSQL float8) to string which does a
> sprintf('%25.18g',number).
>
> Would it be possible to have a a parameter which could be changed by a
> SET command, in order to control output precision ? I searched the docs
> but could not find this.
>
> --
> ----------------------------------------------------------------------
> Pedro Miguel Frazao Fernandes Ferreira
> Universidade do Algarve
> Faculdade de Ciencias e Tecnologia
> Campus de Gambelas
> 8000-117 Faro
> Portugal
> Tel./Fax: (+351) 289 800950 / 289 819403
> http://w3.ualg.pt/~pfrazao
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
>

--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Bruce Momjian 2002-10-29 18:23:10 Re: Turning the PLANNER off
Previous Message Bruce Momjian 2002-10-29 18:13:05 Re: good news: FreeBSD 4.7: all passed (with Bruce's resultmap