Re: float4 problem - Mailing list pgsql-hackers

From Tom Lane
Subject Re: float4 problem
Date
Msg-id 11178.1037814169@sss.pgh.pa.us
Whole thread Raw
In response to Re: float4 problem  (Doug McNaught <doug@mcnaught.org>)
List pgsql-hackers
Doug McNaught <doug@mcnaught.org> writes:
> Oleg Bartunov <oleg@sai.msu.su> writes:
>> May be I miss something, but seems there is a problem with float4
>> in 7.2.3 and 7.3RC1 (6.53 works fine):
>> 
>> test=# create table t ( a float4);
>> CREATE TABLE
>> test=# insert into t values (0.1);
>> INSERT 32789 1
>> test=# select * from t where a=0.1;
>> a
>> ---
>> (0 rows)


> I'm guessing this is because 0.1 is not directly representable as a
> binary floating point number, and literal floating constants are
> float8 not float4, and 0.1::float4 != 0.1::float8.

Right.

I think that this particular form of the problem will go away in 7.4.
Currently, "a = 0.1" is resolved as float4=float8, and there's no way
for the float4 approximation of 0.1 to exactly equal the float8
approximation of it.  However, if we eliminate cross-datatype
comparison operators as I've proposed, the comparison should be resolved
as float4 = float4 and it would work.

Nonetheless, expecting exact equality tests to succeed with float values
is generally folly.  I really do not believe the claim that this worked
in 6.5.3.
        regards, tom lane


pgsql-hackers by date:

Previous
From: Peter Eisentraut
Date:
Subject: Re: [PORTS] Geometry test on NetBSD (was Re: RC1?)
Next
From: Patrick Welche
Date:
Subject: Re: [PORTS] Geometry test on NetBSD (was Re: RC1?)