pgsql: Fix behavior of exp() and power() for infinity inputs.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix behavior of exp() and power() for infinity inputs.
Date: 2020-06-14 15:00:11
Message-ID: E1jkU7H-00024V-NZ@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix behavior of exp() and power() for infinity inputs.

Previously, these functions tended to throw underflow errors for
negative-infinity exponents. The correct thing per POSIX is to
return 0, so let's do that instead. (Note that the SQL standard
is silent on such issues, as it lacks the concepts of either Inf
or NaN; so our practice is to follow POSIX whenever a corresponding
C-library function exists.)

Also, add a bunch of test cases verifying that exp() and power()
actually do follow POSIX for Inf and NaN inputs. While this patch
should guarantee that exp() passes the tests, power() will not unless
the platform's pow(3) is fully POSIX-compliant. I already know that
gaur fails some of the tests, and I am suspicious that the Windows
animals will too; the extent of compliance of other old platforms
remains to be seen. We might choose to drop failing test cases, or
to work harder at overriding pow(3) for these cases, but first let's
see just how good or bad the situation is.

Discussion: https://postgr.es/m/582552.1591917752@sss.pgh.pa.us

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/decbe2bfb1051c5ab6c382b19e1d909e34227a22

Modified Files
--------------
src/backend/utils/adt/float.c | 43 +++++++---
src/test/regress/expected/float8.out | 159 +++++++++++++++++++++++++++++++++++
src/test/regress/sql/float8.sql | 29 +++++++
3 files changed, 221 insertions(+), 10 deletions(-)

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message Thomas Munro 2020-06-15 01:27:45 pgsql: Doc: Add references for SI and SSI.
Previous Message Peter Eisentraut 2020-06-14 06:11:56 pgsql: Add test coverage for EXTRACT()