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 ldbl-128ibm expm1l on large arguments (bug 16408)


On 01/07/2014 10:58 PM, Joseph S. Myers wrote:
> This patch fixes bug 16408, ldbl-128ibm expm1l returning NaN for some
> large arguments.
> 
> The basic problem is that the approach of converting the exponent to
> the form n * log(2) + y, where -0.5 <= y <= 0.5, then computing 2^n *
> expm1(y) + (2^n - 1) falls over when 2^n overflows (starting slightly
> before the point where expm1 overflows, when y is negative and n is
> the least integer for which 2^n overflows).  The ldbl-128 code, and
> the x86/x86_64 code, make expm1l fall back to expl for large positive
> arguments to avoid this issue.  This patch makes the ldbl-128ibm code
> do the same.  (The problem appears for the particular argument in the
> testsuite because the ldbl-128ibm code also uses an overflow threshold
> that's for ldbl-128 and is too big for ldbl-128ibm, but the problem
> described applies for large non-overflowing cases as well, although
> during the freeze is not a suitable time for making the expm1 tests
> cover cases close to overflow more thoroughly.)
> 
> This leaves some code for large positive arguments in expm1l that is
> now dead.  To keep the code for ldbl-128 and ldbl-128ibm similar, and
> to avoid unnecessary changes during the freeze, the patch doesn't
> remove it; instead I propose to file a bug in Bugzilla as a reminder
> that this code (for overflow, including errno setting, and for
> arguments of +Inf) is no longer needed and should be removed from both
> those expm1l implementations.
ok, thanks!

Andreas
-- 
 Andreas Jaeger aj@{suse.com,opensuse.org} Twitter: 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]