On 01/16/2014 08:59 PM, Tom Lane wrote:
> Heikki Linnakangas <hlinnakangas@vmware.com> writes:
>> I propose that we reimplement sum(bigint) in a more efficient way: For
>> the internal state, let's use an int8 and a numeric overflow field. The
>> transition function adds to the int8 variable, and checks for overflow.
>> On overflow, increment the numeric field by one. In the final function,
>> multiply the numeric by 2^64, and add the residual int8 value.
>
> It'd probably be sufficient to handle it as two int64 fields (handmade
> 128-bit arithmetic, or maybe even not so handmade if that ever gets
> reasonably common among C compilers).
True. That would be sufficient for summing 2^64 int8s of INT64_MAX. That
sounds like enough, especially considering that that count() will
overflow after that too.
> You're assuming the final output is still numeric, right?
Yep.
- Heikki