1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-03 20:02:46 +03:00

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.
This commit is contained in:
Tom Lane
2008-04-04 18:45:36 +00:00
parent b6f0ad4b0e
commit a0fad9762a
7 changed files with 470 additions and 32 deletions

View File

@ -1,4 +1,4 @@
<!-- $PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.426 2008/04/04 16:57:21 momjian Exp $ -->
<!-- $PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.427 2008/04/04 18:45:36 tgl Exp $ -->
<chapter id="functions">
<title>Functions and Operators</title>
@ -617,6 +617,9 @@
<indexterm>
<primary>degrees</primary>
</indexterm>
<indexterm>
<primary>div</primary>
</indexterm>
<indexterm>
<primary>exp</primary>
</indexterm>
@ -717,6 +720,15 @@
<entry><literal>28.6478897565412</literal></entry>
</row>
<row>
<entry><literal><function>div</function>(<parameter>y</parameter> <type>numeric</>,
<parameter>x</parameter> <type>numeric</>)</literal></entry>
<entry><type>numeric</></entry>
<entry>integer quotient of <parameter>y</parameter>/<parameter>x</parameter></entry>
<entry><literal>div(9,4)</literal></entry>
<entry><literal>2</literal></entry>
</row>
<row>
<entry><literal><function>exp</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
<entry>(same as input)</entry>