Thread
-
float8 comparison failure
Radek Kanovsky <rk@dat.cz> — 2000-07-28T13:02:35Z
============================================================================ POSTGRESQL BUG REPORT TEMPLATE ============================================================================ Your name : Radek Kanovsky Your email address : rk@dat.cz System Configuration --------------------- Architecture (example: Intel Pentium) : PC - AMD K6 3D Operating System (example: Linux 2.0.26 ELF) : Linux 2.2.16 (Debian) PostgreSQL version (example: PostgreSQL-6.5.3): PostgreSQL-6.5.3 (6.5.1, 6.5.2) Compiler used (example: gcc 2.8.0) : gcc 2.95.2 libc6 2.1.3 Please enter a FULL description of your problem: ------------------------------------------------ I have one table defined as follows CREATE TABLE misto ( idm VARCHAR(8) NOT NULL PRIMARY KEY, nazev VARCHAR(64) NOT NULL, okres VARCHAR(2) NOT NULL, sourad_s FLOAT, sourad_d FLOAT, modifikace DATETIME NOT NULL DEFAULT now(), modifikoval VARCHAR(32) NOT NULL DEFAULT getpgusername() ) ; CREATE INDEX misto_okres ON misto (okres); CREATE INDEX misto_nazev ON misto (nazev); These three SELECTs don't return same result: SELECT idm,sourad_s,sourad_d FROM misto WHERE idm = 'MHO00179'; idm | sourad_s| sourad_d --------+-------------+------------- MHO00179|48.9247114069|17.6064515081 (1 row) SELECT idm,sourad_s,sourad_d FROM misto WHERE sourad_s = 48.9247114069; idm | sourad_s| sourad_d --------+-------------+------------- MHO00179|48.9247114069|17.6064515081 (1 row) SELECT idm,sourad_s,sourad_d FROM misto WHERE sourad_d = 17.6064515081; idm|sourad_s|sourad_d ---+--------+-------- (0 rows) Please describe a way to repeat the problem. Please try to provide a concise reproducible example, if at all possible: ---------------------------------------------------------------------- The problem appears randomly. I havent found any relation with anything else. I often use Python interface for INSERT, UPDATE, SELECT. If you know how this problem might be fixed, list the solution below: --------------------------------------------------------------------- This helps: BEGIN; UPDATE misto SET sourad_d = 17.6064515081 WHERE idm = 'MHO00179'; END; SELECT idm,sourad_s,sourad_d FROM misto WHERE sourad_d = 17.6064515081; idm | sourad_s| sourad_d --------+-------------+------------- MHO00179|48.9247114069|17.6064515081 -
Re: float8 comparison failure
Tom Lane <tgl@sss.pgh.pa.us> — 2000-07-28T15:16:15Z
Radek Kanovsky <rk@dat.cz> writes: > [ float8 values that appear equal are not always equal ] This is not a bug, it's an inherent consequence of the inaccuracy of floating-point math. Use some other data type (numeric, maybe) if you expect to be able to do exact equality comparisons. regards, tom lane