range value problem with double precision [PG 8.3.3]

Started by Zahid Khanover 17 years ago4 messagesbugs
Jump to latest
#1Zahid Khan
khanzahid235@yahoo.com

Hi ,

 I see one issue pg 8.3.3 .

1.
According to the documentation of pg "The double precision type
typically has a range of around 1E-307 to 1E+308 with a precision of at
least 15 digits".

ref:-
 http://www.postgresql.org/docs/8.3/static/datatype-numeric.html

but in PG8.3 the values less then minimum range are being inserted.

e.g
. on insertion of 1E-308 we should get an error of "out of range or
underflow value" but this value is being accepted by server.

Thanks,
Zahid K.

#2Peter Eisentraut
peter_e@gmx.net
In reply to: Zahid Khan (#1)
Re: range value problem with double precision [PG 8.3.3]

Zahid Khan wrote:

Hi ,

�I see one issue pg 8.3.3 .

1.
According to the documentation of pg "The double precision type
typically has a range of around 1E-307 to 1E+308 with a precision of at
least 15 digits".

ref:-
�http://www.postgresql.org/docs/8.3/static/datatype-numeric.html

but in PG8.3 the values less then minimum range are being inserted.

e.g
. on insertion of 1E-308 we should get an error of "out of range or
underflow value" but this value is being accepted by server.

The operating words are "typically" and "around". You can put in smaller and
larger values, but then the precision is going to degrade, as you can observe
here:

peter=# select '1E-305'::float8;
float8
--------
1e-305
(1 row)

peter=# select '1E-310'::float8;
float8
-----------------------
9.99999999999997e-311
(1 row)

peter=# select '1E-315'::float8;
float8
-----------------------
9.99999998481684e-316
(1 row)

peter=# select '1E-320'::float8;
float8
-----------------------
9.99988867182683e-321
(1 row)

peter=# select '1E-325'::float8;
ERROR: 22003: "1E-325" is out of range for type double precision
LOCATION: float8in, float.c:426

The following, however, appears to be a bug:

peter=# select '1E-324'::float8;
ERROR: 22P02: invalid input syntax for type double precision: "1E-324"
LOCATION: float8in, float.c:431

#3Zahid Khan
khanzahid235@yahoo.com
In reply to: Peter Eisentraut (#2)
Re: range value problem with double precision [PG 8.3.3]

hmmm,What I see is, I was getting error  of underflow valuein PG8.2  when i tried to insert '1E-307' in table with double precision.And my application was expecting the same error condition with the same values  against PG 8.3.3 as well.but now thats not the case?

Thanks,
Zahid K.

--- On Fri, 8/22/08, Peter Eisentraut <peter_e@gmx.net> wrote:
From: Peter Eisentraut <peter_e@gmx.net>
Subject: Re: [BUGS] range value problem with double precision [PG 8.3.3]
To: pgsql-bugs@postgresql.org, khanzahid235@yahoo.com
Date: Friday, August 22, 2008, 5:43 AM

Zahid Khan wrote:

Hi ,

 I see one issue pg 8.3.3 .

1.
According to the documentation of pg "The double precision type
typically has a range of around 1E-307 to 1E+308 with a precision of at
least 15 digits".

ref:-
 http://www.postgresql.org/docs/8.3/static/datatype-numeric.html

but in PG8.3 the values less then minimum range are being inserted.

e.g
. on insertion of 1E-308 we should get an error of "out of range or
underflow value" but this value is being accepted by server.

The operating words are "typically" and "around". You can
put in smaller and
larger values, but then the precision is going to degrade, as you can observe
here:

peter=# select '1E-305'::float8;
float8
--------
1e-305
(1 row)

peter=# select '1E-310'::float8;
float8
-----------------------
9.99999999999997e-311
(1 row)

peter=# select '1E-315'::float8;
float8
-----------------------
9.99999998481684e-316
(1 row)

peter=# select '1E-320'::float8;
float8
-----------------------
9.99988867182683e-321
(1 row)

peter=# select '1E-325'::float8;
ERROR: 22003: "1E-325" is out of range for type double precision
LOCATION: float8in, float.c:426

The following, however, appears to be a bug:

peter=# select '1E-324'::float8;
ERROR: 22P02: invalid input syntax for type double precision:
"1E-324"
LOCATION: float8in, float.c:431

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#2)
Re: range value problem with double precision [PG 8.3.3]

Peter Eisentraut <peter_e@gmx.net> writes:

The following, however, appears to be a bug:

peter=# select '1E-324'::float8;
ERROR: 22P02: invalid input syntax for type double precision: "1E-324"
LOCATION: float8in, float.c:431

I see this behavior on Fedora 9, but not on HPUX. Investigation shows
that F9's strtod returns EDOM not ERANGE for this case. Seems like a
glibc bug ...

regards, tom lane