Re-implement division for numeric values using the traditional "schoolbook"
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 4 Apr 2008 18:45:36 +0000 (18:45 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 4 Apr 2008 18:45:36 +0000 (18:45 +0000)
commit94d2e9324c88a393d54d5c02f14d198edda75168
treee6b55a87abe8a2fc25e19b8e6fc54c5de5211517
parent38ab4366ded76693fe5f1b99d97357e10f7b9cbf
Re-implement division for numeric values using the traditional "schoolbook"
algorithm.  This is a good deal slower than our old roundoff-error-prone
code for long inputs, so we keep the old code for use in the transcendental
functions, where everything is approximate anyway.  Also create a
user-accessible function div(numeric, numeric) to provide access to the
exact result of trunc(x/y) --- since the regular numeric / operator will
round off its result, simply computing that expression in SQL doesn't
reliably give the desired answer.  This fixes bug #3387 and various related
corner cases, and improves the usefulness of PG for high-precision integer
arithmetic.
doc/src/sgml/func.sgml
src/backend/utils/adt/numeric.c
src/include/catalog/catversion.h
src/include/catalog/pg_proc.h
src/include/utils/builtins.h
src/test/regress/expected/numeric.out
src/test/regress/sql/numeric.sql