This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fix exp10 spurious overflows (bug 13924)


On 04/29/2012 02:42 PM, Joseph S. Myers wrote:
Bug 13924 is spurious overflow from exp10 (-DBL_MAX), and similarly
exp10f (-FLT_MAX) (and the C version of exp10l (-LDBL_MAX)), which
should be underflow cases not overflow, because the implementations
multiply the argument by log(10) which overflows to negative infinity.

I propose this patch to fix this overflow by checking for underflow
cases before doing the multiplication.  In the case of exp10f, rather
than checking for the underflow case it seems more natural to fix the
float case of bug 13884 (exp10 inaccuracy) at the same time by doing
exponentiation in double, which provides enough extra bits (actually
you only need about 7 extra bits in this case) to make exp10f
accurate.

(The long double implementation changed isn't used on x86 or x86_64
but the change is mechanical and analogous to the change to the double
implementation.  The x86/x86_64 long double implementations have their
own problems with exceptions, bug 13914.)

Tested x86_64 and x86; no ulps changes needed.

2012-04-29 Joseph Myers<joseph@codesourcery.com>

	[BZ #13884]
	[BZ #13924]
	* math/e_exp10.c: Include<float.h>.
	(__ieee754_exp10): Handle underflow here rather than multiplying
	large negative argument by M_LN10.
	* math/e_exp10f.c (__ieee754_exp10f): Call __ieee754_exp instead
	of __ieee754_expf.
	* math/e_exp10l.c: Include<float.h>.
	(__ieee754_exp10l): Handle underflow here rather than multiplying
	large negative argument by M_LN10l.
	* math/libm-test.inc (exp10_test): Add another test.  Do not allow
	spurious overflow exception on underflow.

thanks, this is ok.


Andreas
--
 Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi
  SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
   GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg)
    GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]