From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Thu, 9 Dec 2021 18:55:53 +0000 (-0800) Subject: bpo-46018: Ensure that math.expm1 does not raise on underflow (GH-29997) X-Git-Tag: v3.9.10~76 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5ae4265b8c8042c496e569b6dbf9ef107e1d5b31;p=thirdparty%2FPython%2Fcpython.git bpo-46018: Ensure that math.expm1 does not raise on underflow (GH-29997) (cherry picked from commit 3363e1cb05d0d19ed172ea63606d8cb6268747fc) Co-authored-by: Steve Dower --- 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 000000000000..6ff76f58779d --- /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 c974601b95e3..1f16849a3e6f 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -971,9 +971,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,