On Fri, Jul 30, 2010 at 2:08 PM, Tom Lane <t...@sss.pgh.pa.us> wrote: > Robert Haas <robertmh...@gmail.com> writes: >> .... Maybe something like this, >> obviously with a suitable comment which I haven't written yet: > >> numeric_digits = (precision + 6) / 4; >> return (numeric_digits * sizeof(int16)) + NUMERIC_HDRSZ; > > This is OK for the base-10K case, but there's still code in there > for the base-10 and base-100 cases. Can you express this logic in > terms of DEC_DIGITS and sizeof(NumericDigit) ? I think you might > find it was actually clearer that way, cf Polya.
It appears to work out to: numeric_digits = (precision + 2 * (DEC_DIGITS - 1)) / DEC_DIGITS return (numeric_digits * sizeof(NumericDigits)) + NUMERIC_HDRSZ; The smallest value for precision which requires 2 numeric_digits is always 2; and the required number of numeric_digits increases by 1 each time the number of base-10 digits increases by DEC_DIGITS. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise Postgres Company -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers