[Python-checkins] bpo-46018: Ensure that math.expm1 does not raise on underflow (GH-29997)

zooba webhook-mailer at python.org
Thu Dec 9 13:32:04 EST 2021


https://github.com/python/cpython/commit/3363e1cb05d0d19ed172ea63606d8cb6268747fc
commit: 3363e1cb05d0d19ed172ea63606d8cb6268747fc
branch: main
author: Steve Dower <steve.dower at python.org>
committer: zooba <steve.dower at microsoft.com>
date: 2021-12-09T18:31:54Z
summary:

bpo-46018: Ensure that math.expm1 does not raise on underflow (GH-29997)

files:
A Misc/NEWS.d/next/Library/2021-12-09-00-44-42.bpo-46018.hkTI7v.rst
M Modules/mathmodule.c

diff --git a/Misc/NEWS.d/next/Library/2021-12-09-00-44-42.bpo-46018.hkTI7v.rst b/Misc/NEWS.d/next/Library/2021-12-09-00-44-42.bpo-46018.hkTI7v.rst
new file mode 100644
index 0000000000000..6ff76f58779d2
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2021-12-09-00-44-42.bpo-46018.hkTI7v.rst
@@ -0,0 +1 @@
+Ensure that :func:`math.expm1` does not raise on underflow.
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index 84b5b954b1051..011ce0afd3aec 100644
--- a/Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -985,9 +985,13 @@ is_error(double x)
          * On some platforms (Ubuntu/ia64) it seems that errno can be
          * set to ERANGE for subnormal results that do *not* underflow
          * to zero.  So to be safe, we'll ignore ERANGE whenever the
-         * function result is less than one in absolute value.
+         * function result is less than 1.5 in absolute value.
+         *
+         * bpo-46018: Changed to 1.5 to ensure underflows in expm1()
+         * are correctly detected, since the function may underflow
+         * toward -1.0 rather than 0.0.
          */
-        if (fabs(x) < 1.0)
+        if (fabs(x) < 1.5)
             result = 0;
         else
             PyErr_SetString(PyExc_OverflowError,



More information about the Python-checkins mailing list