Fix clog / clog10 sign of zero result in round-downward mode (bug 16789).

System Internals / glibc - Joseph Myers [codesourcery.com] - 2 April 2014 08:10 UTC

This patch fixes bug 16789, incorrect sign of (real part) zero result from clog and clog10 in round-downward mode, arising from that real part being computed as 0 - 0. To ensure that an underflow exception occurred, the code used an underflowing value (the next term in the series for log1p) in arithmetic computing the real part of the result, yielding the problematic 0 - 0 computation in some cases even when the mathematical result would be small but positive. The patch changes this code to use the math_force_eval approach to ensuring that an underflowing computation actually occurs. Tests of clog and clog10 are enabled in all rounding modes.

Tested x86_64 and x86 and ulps updated accordingly.

[BZ #16789]
- math/s_clog.c (__clog): Use math_force_eval to ensure underflow instead of using underflowing value in computing result.
- math/s_clog10.c (__clog10): Likewise.
- math/s_clog10f.c (__clog10f): Likewise.
- math/s_clog10l.c (__clog10l): Likewise.
- math/s_clogf.c (__clogf): Likewise.
- math/s_clogl.c (__clogl): Likewise.
- math/libm-test.inc (clog_test): Use ALL_RM_TEST. (clog10_test): Likewise.
- sysdeps/i386/fpu/libm-test-ulps: Update.
- sysdeps/x86_64/fpu/libm-test-ulps: Likewise.

6f05baf Fix clog / clog10 sign of zero result in round-downward mode (bug 16789).
ChangeLog | 15 ++++++
NEWS | 3 +-
math/libm-test.inc | 8 +---
math/s_clog.c | 9 ++--
math/s_clog10.c | 9 ++--
math/s_clog10f.c | 11 ++---
math/s_clog10l.c | 7 ++-
math/s_clogf.c | 9 ++--
math/s_clogl.c | 6 ++-
sysdeps/i386/fpu/libm-test-ulps | 96 +++++++++++++++++++++++++++++++++++++
sysdeps/x86_64/fpu/libm-test-ulps | 96 +++++++++++++++++++++++++++++++++++++
11 files changed, 233 insertions(+), 36 deletions(-)

Upstream: sourceware.org


  • Share