Fix exp2, exp2f spurious underflows (bug 18219).
commitb59549574efeeecf124de05c9183c120eaaa56f0
authorJoseph Myers <joseph@codesourcery.com>
Tue, 23 Jun 2015 14:35:18 +0000 (23 14:35 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 23 Jun 2015 14:35:18 +0000 (23 14:35 +0000)
treeae18151390fc556d7ad3fa74246b032ce9dd6db8
parentb57525f1a376149840f740a31535681c07152ba4
Fix exp2, exp2f spurious underflows (bug 18219).

The dbl-64 and flt-32 implementations of exp2 functions produce
spurious underflow exceptions.  The underlying reason is the same in
both cases: the computation works as (2^a - 1)*2^b + 2^b for suitably
chosen a and b, where a has small magnitude so 2^a - 1 can be computed
with a low-degree polynomial approximation, and (2^a - 1)*2^b can
underflow even when the final result does not.  This patch fixes this
by adjusting the threshold for when scaling is used to avoid
intermediate underflow so it works for any possible value of a where
the final result would not underflow.

Tested for x86_64 and x86.

[BZ #18219]
* sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Reduce
threshold on absolute value of exponent for which scaling is used.
* sysdeps/ieee754/flt-32/e_exp2f.c (__ieee754_exp2f): Likewise.
* math/auto-libm-test-in: Add more tests of exp2.
* math/auto-libm-test-out: Regenerated.
ChangeLog
NEWS
math/auto-libm-test-in
math/auto-libm-test-out
sysdeps/ieee754/dbl-64/e_exp2.c
sysdeps/ieee754/flt-32/e_exp2f.c