On Thu, 2021-04-22 at 13:50 -0400, Tom Lane wrote:
> Laurenz Albe <laurenz.a...@cybertec.at> writes:
> > On Mon, 2021-04-19 at 08:00 +0000, PG Doc comments form wrote:
> > > The 'round' mathematical function documentation doesn't specify its 
> > > rounding
> > > strategy. If this would be documented then users can rely on its rounding
> > > behavior. For double precision the rounding probably depends on your
> > > platform. For numeric the function seems to round to nearest with ties 
> > > going
> > > away from zero (sometimes referred to as "round half up). 6.5 -> 7.0 and
> > > -6.5 -> -7.0.
> >
> > Here is a proposed patch.
> 
> LGTM, although I think we can be a bit more specific about the float
> case.  I suggest
> 
>         ... by rounding away from 0.  For <type>double precision</type>,
>         the tie-breaking behavior is platform dependent, but
>         <quote>round to nearest even</quote> is the most common rule.

Makes sense.  Here is an updated patch.

Yours,
Laurenz Albe
From 7881d8a73f6cf93c21a9d1405736c6ce6cff5429 Mon Sep 17 00:00:00 2001
From: Laurenz Albe <laurenz.a...@cybertec.at>
Date: Fri, 23 Apr 2021 09:38:27 +0200
Subject: [PATCH] Document tie breaking behavior of round()

---
 doc/src/sgml/func.sgml | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index 67d802b02c..9ed39dabfd 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -1568,7 +1568,11 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
         <returnvalue>double precision</returnvalue>
        </para>
        <para>
-        Rounds to nearest integer
+        Rounds to nearest integer.  For <type>numeric</type>, ties are
+        broken by rounding away from 0.  For <type>double precision</type>,
+        the tie breaking behavior is architecture dependent, but
+        <quote>round to nearest even</quote> in accordance with IEEE-754
+        is the most common rule.
        </para>
        <para>
         <literal>round(42.4)</literal>
@@ -1583,7 +1587,7 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
        </para>
        <para>
         Rounds <parameter>v</parameter> to <parameter>s</parameter> decimal
-        places
+        places.  Ties are broken by rounding away from 0.
        </para>
        <para>
         <literal>round(42.4382, 2)</literal>
-- 
2.26.3

Reply via email to