Re: Output float number with hex format - Mailing list pgsql-general

From 沈雷
Subject Re: Output float number with hex format
Date
Msg-id b35448351001290145q3c7b8663i10723d40e8b1943f@mail.gmail.com
Whole thread Raw
In response to Re: Output float number with hex format  (Vincenzo Romano <vincenzo.romano@notorand.it>)
List 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.romano@notorand.it>
2010/1/29 沈雷 <drshenlei@gmail.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.

pgsql-general by date:

Previous
From: Guillaume Lelarge
Date:
Subject: Re: [pgsql-www] Versions RSS page is missing version(s)
Next
From: Rodger Donaldson
Date:
Subject: Re: Amazon EC2 CPU Utilization