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.
>
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? |