Search Postgresql Archives

Re: IEEE 754-2008 decimal numbers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

--
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux