Craig Ringer wrote:
> On 10/11/2010 04:46 AM, Thomas Munro wrote:
>> Has anyone done any work on IEEE 754-2008 decimal types for PostgreSQL?
>
> I haven't seen any discussion. Perhaps you should ask on pgsql-hackers@
> as well, as some folks who might've tried it read that list but not this
> one.
>
>> I couldn't find anything, so I was thinking it might be a fun exercise
>> for learning about extending PostgreSQL with user defined types. My
>> first goal is to be able to store decimal numbers with a smaller disk
>> footprint than NUMERIC.
>
> NUMERIC just got a smaller header in 9.1, but AFAIK is still binary
> coded decimal (BCD). A smaller and possibly faster fixed-precision
> numeric would certainly be awfully nice. Not everybody needs perfect
> precision, only tightly controlled precision with sane and controllable
> rounding rules.
>
> What I'd give for rounding rule control with numeric types....
I for one did design in rounding rule control awhile ago to my "Muldis D"
language for object-relational DBMSs such as Postgres.
My specification lets you apply a rounding rule to any operation that would in
general produce an irrational number so to say how exactly it would be rounded
to a rational number (assuming we're not doing symbolic math), or it could be
used simply for rounding, such as when degrading a "big rat" to a fixed-bit
numeric type.
The control (which is radix-agnostic) takes 3 details, which are essentially the
target radix (integer 2..N; usually 2 or 10), a quantum size in that radix
(expressed as a usually-negative integer power of the radix), and an enum-typed
indicator to affect rounding direction (9 options so far, including the most
common programming language defaults of Down (floor), ToZero (truncate)).
For example, you could say something like:
foo ** bar round RoundRule:[10,-3,Down]
... or some such to fit the exponentiation result in a DECIMAL with thousandths
precision.
Or, a simpler version to control an all-integer operation:
needed_boxes := num_widgets div widgets_per_box round Up
Other systems would be wise to adapt such a design also.
-- Darren Duncan