Обсуждение: float conversion / presentation problem ?

Поиск
Список
Период
Сортировка

float conversion / presentation problem ?

От
Enrico Weigelt
Дата:
Hi folks,


i've noticed an problem with conversion from real to float -
this produces ugly values. (in fact it seems to be real->float8)

> fxignal=# SELECT 12.345::real::float;
>       float8
> ------------------
>  12.3450002670288

Maybe its not really an conversion problem, but an bug in sprintf(),
(there were some other float related bugs known in glibc), as these
examples let me suspect:

> fxignal=# SELECT 12.345::real::float::real;
>  float4
> --------
>  12.345

> fxignal=# SELECT ((12.345::real::float8)-(0.345::float8))::real;
>  float4
> --------
>      12

I noticed this behaviour on postgresql-7.4.1 and 7.4.3 on glibc-2.3.2


BTW: real is an alias to float4 ?

regards,
--
---------------------------------------------------------------------
 Enrico Weigelt    ==   metux IT service

  phone:     +49 36207 519931         www:       http://www.metux.de/
  fax:       +49 36207 519932         email:     contact@metux.de
  cellphone: +49 174 7066481
---------------------------------------------------------------------
 -- DSL ab 0 Euro. -- statische IP -- UUCP -- Hosting -- Webshops --
---------------------------------------------------------------------

Re: float conversion / presentation problem ?

От
Tom Lane
Дата:
Enrico Weigelt <weigelt@metux.de> writes:
> i've noticed an problem with conversion from real to float -
> this produces ugly values. (in fact it seems to be real->float8)

You do realize that float4/real is only good to six decimal places
on most platforms?

You can take the issue up with the glibc boys if you like, but
I think you'll get laughed off.

            regards, tom lane

Re: float conversion / presentation problem ?

От
John R Pierce
Дата:
Tom Lane wrote:
> Enrico Weigelt <weigelt@metux.de> writes:
>
>>i've noticed an problem with conversion from real to float -
>>this produces ugly values. (in fact it seems to be real->float8)
>
>
> You do realize that float4/real is only good to six decimal places
> on most platforms?
>
> You can take the issue up with the glibc boys if you like, but
> I think you'll get laughed off.

and importantly, are stored as binary fractions.  0.10000 decimal is a
repeating fraction in binary, its like .1100110011.... x 2^-2 or something as a
FLOAT.   Float4 has like 22 bits of significants for the mantissa, while Float8
has like 51 bits or something (this is from rusty memory, so I could have
slipped a few bits here).

Re: float conversion / presentation problem ?

От
Tom Lane
Дата:
John R Pierce <pierce@hogranch.com> writes:
> Tom Lane wrote:
>> You do realize that float4/real is only good to six decimal places
>> on most platforms?

> and importantly, are stored as binary fractions.  0.10000 decimal is a
> repeating fraction in binary, its like .1100110011.... x 2^-2 or
> something as a FLOAT.

Right, and conversely a fraction that's cut off at a certain number of
base-2 digits often corresponds to a repeating pattern of base-10
digits.  I once had a clue about the exact laws for this, but it was
many years ago :-(

            regards, tom lane

Re: float conversion / presentation problem ?

От
Neil Conway
Дата:
Enrico Weigelt wrote:
> BTW: real is an alias to float4 ?

Yes.

-Neil

Re: float conversion / presentation problem ?

От
David Fetter
Дата:
On Thu, Apr 07, 2005 at 01:02:50AM -0400, Tom Lane wrote:
> John R Pierce <pierce@hogranch.com> writes:
> > Tom Lane wrote:
> >> You do realize that float4/real is only good to six decimal
> >> places on most platforms?
>
> > and importantly, are stored as binary fractions.  0.10000 decimal
> > is a repeating fraction in binary, its like .1100110011.... x 2^-2
> > or something as a FLOAT.
>
> Right, and conversely a fraction that's cut off at a certain number
> of base-2 digits often corresponds to a repeating pattern of base-10
> digits.  I once had a clue about the exact laws for this, but it was
> many years ago :-(

As with base-10, any denominator that can't be expressed as a power of
the prime factors in the base results in a repeating number.  So
basically any denominator that can't be expressed as 2^n turns into a
repeating binary doohicky.

Cheers,
D
--
David Fetter david@fetter.org http://fetter.org/
phone: +1 510 893 6100   mobile: +1 415 235 3778

Remember to vote!

Re: float conversion / presentation problem ?

От
Enrico Weigelt
Дата:
* Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Enrico Weigelt <weigelt@metux.de> writes:
> > i've noticed an problem with conversion from real to float -
> > this produces ugly values. (in fact it seems to be real->float8)
>
> You do realize that float4/real is only good to six decimal places
> on most platforms?

Thats okay for me. I need only four.

> You can take the issue up with the glibc boys if you like, but
> I think you'll get laughed off.
ehm, why ?


cu
--
---------------------------------------------------------------------
 Enrico Weigelt    ==   metux IT service

  phone:     +49 36207 519931         www:       http://www.metux.de/
  fax:       +49 36207 519932         email:     contact@metux.de
  cellphone: +49 174 7066481
---------------------------------------------------------------------
 -- DSL ab 0 Euro. -- statische IP -- UUCP -- Hosting -- Webshops --
---------------------------------------------------------------------