Re: Output float number with hex format

Поиск
Список
Период
Сортировка
От 沈雷
Тема Re: Output float number with hex format
Дата
Msg-id b35448351001290145q3c7b8663i10723d40e8b1943f@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Output float number with hex format  (Vincenzo Romano <vincenzo.romano@notorand.it>)
Список 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 по дате отправления:

Предыдущее
От: Guillaume Lelarge
Дата:
Сообщение: Re: [pgsql-www] Versions RSS page is missing version(s)
Следующее
От: Rodger Donaldson
Дата:
Сообщение: Re: Amazon EC2 CPU Utilization