Re: Output float number with hex format

From: 沈雷 <drshenlei(at)gmail(dot)com>
To: Vincenzo Romano <vincenzo(dot)romano(at)notorand(dot)it>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Output float number with hex format
Date: 2010-01-29 09:45:08
Message-ID: b35448351001290145q3c7b8663i10723d40e8b1943f@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Thank you for the reply.

After 3 hours trials and reading the source code of Postgres backend, now I
can figure out a way to transfer float data from sever to client and then
write back to server *without lose any precision*.

At server part, it uses strtod to convert received string to float value,
while it uses sprintf(str, "%.*g", DBL_DIG + extra_float_digits, val) to
convert float value to string. Here the extra_float_digits == 0 in default
and DBL_DIG ==15 which is defined in "float.h".

Therefore, at client part, we should use the *EXACT* same way to do
conversion. I mean we should use sprintf(str, "%.15g", val) and strtod.

I have tested about 10000 random float values, it works fine. Interestingly,
if I use "%.16g", "%.17g"...etc, precision lost will occur.

--
ShenLei

2010/1/29 Vincenzo Romano <vincenzo(dot)romano(at)notorand(dot)it>

> 2010/1/29 沈雷 <drshenlei(at)gmail(dot)com>:
> > Hi!
> >
> > In C Language, there is a way to format float numbers into a hex string
> by
> > using "%a" in printf.
> > eg:
> > the value: 1.2345 can be expressed as '0x1.3c083126e978dp+0' which is the
> > hex representation of a float number.
> >
> > I have tried this in Postgres:
> > SELECT '0x1.3c083126e978dp+0'::float;
> > float8
> > --------
> > 1.2345
> > (1 row)
> > This means that Postgres can accepty hex float as *input*. However I
> cannot
> > find any format function for *output*.
> > to_char(..., ...) does not have "%a"-like format. Is there any way to do
> > that?
> >
> > Thank you in advance.
> >
> > --
> > ShenLei
>
> Well, your question sould be about a scanf, not printf, as this is
> input, not output.
> While being an "interesting" feature, I don't see and use for it.
> And, in my opinion, this is not the first and only feature that works
> and is not documented.
> So, please, don't rely on it until it gets documented.
>

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Joe Kramer 2010-01-29 10:21:00 Re: How to generate unique hash-type id?
Previous Message Magnus Hagander 2010-01-29 09:41:12 Re: How to generate unique hash-type id?