Search Postgresql Archives

cast question: max double precision > text > double precision fails with out or range error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



postgres=# select (((1.7976931348623157081e+308)::double
precision)::text)::double precision;
ERROR:  "1.79769313486232e+308" is out of range for type double precision

I can't think of too many practical use cases here, but I'm working on
a pg driver and in my float data decoder functional tests, I ran into
some errors that I eventually traced back to this behavior.
Essentially, postgres seems to cast the max normal double (i.e., the
bits of ~(1ULL<<52 | 1ULL<<63)) to text in such a manner that it's
rounded up, and the reverse cast, text-to-double-precision, does not
recognize it as being in range. Is this just a case of "don't do
that"? Curiously, pg_dump seems to print doubles with more precision
(in both COPY and INSERT modes), avoiding this issue. Of course I'm
not expecting perfect precision in round-tripping doubles like this
(this is always dicey with IEEE floating point anyway), but failing
outright is a little ugly. Any thoughts? Version is PostgreSQL 8.4.6
on i486-pc-linux-gnu, compiled by GCC gcc-4.4.real (Ubuntu
4.4.3-4ubuntu5) 4.4.3, 32-bit.

Thanks,
Maciek Sakrejda

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux