Re: Optimizing numeric SUM() aggregate
От | Andrew Borodin |
---|---|
Тема | Re: Optimizing numeric SUM() aggregate |
Дата | |
Msg-id | CAJEAwVE-sDR_ZuQ8uKY2HW8L3TSsuEoO7qoKwcjyeR50BXfvEw@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Optimizing numeric SUM() aggregate (Andrew Borodin <borodin@octonica.com>) |
Ответы |
Re: Optimizing numeric SUM() aggregate
|
Список | pgsql-hackers |
>I think we could do carry every 0x7FFFFFF / 10000 accumulation, couldn't we? I feel that I have to elaborate a bit. Probably my calculations are wrong. Lets assume we already have accumulated INT_MAX of 9999 digits in previous-place accumulator. That's almost overflow, but that's not overflow. Carring that accumulator to currents gives us INT_MAX/10000 carried sum. So in current-place accumulator we can accumulate: ( INT_MAX - INT_MAX / 10000 ) / 9999, where 9999 is max value dropped in current-place accumulator on each addition. That is INT_MAX * 9999 / 99990000 or simply INT_MAX / 10000. If we use unsigned 32-bit integer that is 429496. Which is 43 times less frequent carring. As a bonus, we get rid of 9999 const in the code (: Please correct me if I'm wrong. Best regards, Andrey Borodin, Octonica & Ural Federal University.
В списке pgsql-hackers по дате отправления: