Главная страница


su.dbms.sql

 
 - SU.DBMS.SQL ------------------------------------------------------------------
 From : RAD                                  2:5020/400     09 Feb 2001  21:02:24
 To : All
 Subject : PostgreSQL: SUM(float8) bug
 -------------------------------------------------------------------------------- 
 
 Hi !
 
 Помогите, пожалуйста, разобраться где теряется точность
 при суммировании. Проблема возникает при суммирование
 большого кол-ва чисел с разным порядком.
 Вот, собственно, пример:
 
 db=> CREATE TABLE t4 (f float4);
 db=> CREATE TABLE t8 (f float8);
 
 db=> INSERT INTO t4 VALUES (0.123456);
 db=> INSERT INTO t4 VALUES (4031);
 db=> INSERT INTO t8 VALUES (0.123456);
 db=> INSERT INTO t8 VALUES (4031);
 
 db=> SELECT SUM(f) FROM t4;
 
     sum
 -------
 4301.12        -- здесь понятно, это из-за округления (у float4 6 decimal
 places)
 db=> SELECT SUM(f::float8) FROM t4;
 
              sum
 ----------------
 4301.12345600128
              ^^^        -- а здесь из-за чего ошибка в младших разрядах?
 Дальше ещё один "фокус":
 
 db=> INSERT INTO t8 SELECT * FROM t8;
 
 INSERT 0 2
 
 db=> INSERT INTO t8 SELECT * FROM t8;
 
 INSERT 0 4
 
 db=> INSERT INTO t8 SELECT * FROM t8;
 
 INSERT 0 8
 .....
 
 db=> INSERT INTO t8 SELECT * FROM t8;
 
 INSERT 0 131072
 db=> SELECT SUM(f) FROM t8;
 
              sum
 ----------------
 528367413.624994     -- хотя здесь должно быть 131072 * (4031 + 0.123456) =
 528367412.624832
                         (ошибка опять в младших трёх разрядах!)
 Bug Postgres'a для типа float8 ?
 Есть какие-нибудь способы вылечить/обойти это ?
 Заранее спасибо
 Даутханов Руслан   rd@krs.ru
 
 --- ifmail v.2.15dev5
  * Origin: Rostelecom JSC (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 PostgreSQL: SUM(float8) bug   RAD   09 Feb 2001 21:02:24 
 Re: PostgreSQL: SUM(float8) bug   Andrei N.Sobchuck   11 Feb 2001 14:10:14 
Архивное /su.dbms.sql/17299bcaab371.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional