Re: IEEE 754-2008 decimal numbers
От | Darren Duncan |
---|---|
Тема | Re: IEEE 754-2008 decimal numbers |
Дата | |
Msg-id | 4CB27684.1060907@darrenduncan.net обсуждение исходный текст |
Ответ на | Re: IEEE 754-2008 decimal numbers (Craig Ringer <craig@postnewspapers.com.au>) |
Список | pgsql-general |
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
В списке pgsql-general по дате отправления: