From e6a6b1c3de62f3ae3f0e5ac5bdcc49a3342f03e7 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Wed, 9 Dec 2015 23:51:11 +0000 Subject: Fix ldbl-128ibm logl inaccuracy near 1 (bug 19351). The ldbl-128ibm implementation of logl is inaccurate for arguments near 1, because when deciding whether to bypass a series expansion for log(1+z), where z = x-1, it compares the square of z rather than z itself with an epsilon value. This patch fixes that comparison, so eliminating the test failures for inaccuracy of logl in such cases. Tested for powerpc. [BZ #19351] * sysdeps/ieee754/ldbl-128ibm/e_logl.c (__ieee754_logl): When expanding log(1+z), compare z rather than its square with epsilon to determine when to avoid evaluating the expansion. --- ChangeLog | 5 +++++ sysdeps/ieee754/ldbl-128ibm/e_logl.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 1c7b198..ec8807c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2015-12-09 Joseph Myers + [BZ #19351] + * sysdeps/ieee754/ldbl-128ibm/e_logl.c (__ieee754_logl): When + expanding log(1+z), compare z rather than its square with epsilon + to determine when to avoid evaluating the expansion. + [BZ #19350] * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c (__ieee754_sinhl): Increase overflow threshold. diff --git a/sysdeps/ieee754/ldbl-128ibm/e_logl.c b/sysdeps/ieee754/ldbl-128ibm/e_logl.c index dcac380..14acfc2 100644 --- a/sysdeps/ieee754/ldbl-128ibm/e_logl.c +++ b/sysdeps/ieee754/ldbl-128ibm/e_logl.c @@ -270,7 +270,7 @@ __ieee754_logl(long double x) /* Series expansion of log(1+z). */ w = z * z; /* Avoid spurious underflows. */ - if (__glibc_unlikely(w <= ldbl_epsilon)) + if (__glibc_unlikely (fabsl (z) <= ldbl_epsilon)) y = 0.0L; else { -- cgit v1.1