This is the mail archive of the glibc-cvs@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]

GNU C Library master sources branch master updated. glibc-2.21-352-gff069f0


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  ff069f024ae8cf15d53429e034d67ddcece0f67a (commit)
      from  b2fb25240813266e4f62f2dd039573f1a042ea2f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=ff069f024ae8cf15d53429e034d67ddcece0f67a

commit ff069f024ae8cf15d53429e034d67ddcece0f67a
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Fri May 15 17:21:08 2015 +0000

    Fix lgammaf spurious underflows (bug 18220).
    
    The flt-32 implementation of lgammaf produces spurious underflow
    exceptions for some large arguments, because of calculations involving
    x^-2 multiplied by small constants.  This patch fixes this by
    adjusting the threshold for a simpler computation to 2**26 (the error
    in the simpler computation is on the order of 0.5 * log (x), for a
    result on the order of x * log (x)).
    
    Tested for x86_64 and x86.
    
    	[BZ #18220]
    	* sysdeps/ieee754/flt-32/e_lgammaf_r.c (__ieee754_lgammaf_r): Use
    	2**26 not 2**58 as threshold for returning x * (log (x) - 1).
    	* math/auto-libm-test-in: Add another test of lgamma.
    	* math/auto-libm-test-out: Regenerated.

diff --git a/ChangeLog b/ChangeLog
index 7749398..2b29214 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2015-05-15  Joseph Myers  <joseph@codesourcery.com>
+
+	[BZ #18220]
+	* sysdeps/ieee754/flt-32/e_lgammaf_r.c (__ieee754_lgammaf_r): Use
+	2**26 not 2**58 as threshold for returning x * (log (x) - 1).
+	* math/auto-libm-test-in: Add another test of lgamma.
+	* math/auto-libm-test-out: Regenerated.
+
 2015-05-15  Wilco Dijkstra  <wdijkstr@arm.com>
 
 	* stdio-common/printf_fp.c (___printf_fp): Use abs.
diff --git a/NEWS b/NEWS
index bc6c0cd..b85ba60 100644
--- a/NEWS
+++ b/NEWS
@@ -17,7 +17,7 @@ Version 2.22
   17999, 18007, 18019, 18020, 18029, 18030, 18032, 18036, 18038, 18039,
   18042, 18043, 18046, 18047, 18068, 18080, 18093, 18100, 18104, 18110,
   18111, 18125, 18128, 18138, 18185, 18196, 18197, 18206, 18210, 18211,
-  18217, 18247, 18287, 18319, 18333, 18346, 18397, 18409.
+  18217, 18220, 18247, 18287, 18319, 18333, 18346, 18397, 18409.
 
 * Cache information can be queried via sysconf() function on s390 e.g. with
   _SC_LEVEL1_ICACHE_SIZE as argument.
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index c4bfe74..2a88403 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -1757,6 +1757,7 @@ lgamma 0.5
 lgamma -0.5
 lgamma 0.7
 lgamma 1.2
+lgamma 0x3.8p56
 lgamma 0x1p-5
 lgamma -0x1p-5
 lgamma 0x1p-10
diff --git a/math/auto-libm-test-out b/math/auto-libm-test-out
index d717ea4..0aa7b75 100644
--- a/math/auto-libm-test-out
+++ b/math/auto-libm-test-out
@@ -139612,6 +139612,31 @@ lgamma 1.2
 = lgamma tonearest ldbl-128ibm 0x1.33333333333333333333333333p+0L : -0x1.5db138c7d70c72cb0b57c9e83d8p-4L 1 : inexact-ok
 = lgamma towardzero ldbl-128ibm 0x1.33333333333333333333333333p+0L : -0x1.5db138c7d70c72cb0b57c9e83dp-4L 1 : inexact-ok
 = lgamma upward ldbl-128ibm 0x1.33333333333333333333333333p+0L : -0x1.5db138c7d70c72cb0b57c9e83dp-4L 1 : inexact-ok
+lgamma 0x3.8p56
+= lgamma downward flt-32 0x3.8p+56f : 0x8.8bdd4p+60f 1 : inexact-ok
+= lgamma tonearest flt-32 0x3.8p+56f : 0x8.8bdd4p+60f 1 : inexact-ok
+= lgamma towardzero flt-32 0x3.8p+56f : 0x8.8bdd4p+60f 1 : inexact-ok
+= lgamma upward flt-32 0x3.8p+56f : 0x8.8bdd5p+60f 1 : inexact-ok
+= lgamma downward dbl-64 0x3.8p+56 : 0x8.8bdd41bf4484p+60 1 : inexact-ok
+= lgamma tonearest dbl-64 0x3.8p+56 : 0x8.8bdd41bf44848p+60 1 : inexact-ok
+= lgamma towardzero dbl-64 0x3.8p+56 : 0x8.8bdd41bf4484p+60 1 : inexact-ok
+= lgamma upward dbl-64 0x3.8p+56 : 0x8.8bdd41bf44848p+60 1 : inexact-ok
+= lgamma downward ldbl-96-intel 0x3.8p+56L : 0x8.8bdd41bf4484605p+60L 1 : inexact-ok
+= lgamma tonearest ldbl-96-intel 0x3.8p+56L : 0x8.8bdd41bf4484605p+60L 1 : inexact-ok
+= lgamma towardzero ldbl-96-intel 0x3.8p+56L : 0x8.8bdd41bf4484605p+60L 1 : inexact-ok
+= lgamma upward ldbl-96-intel 0x3.8p+56L : 0x8.8bdd41bf4484606p+60L 1 : inexact-ok
+= lgamma downward ldbl-96-m68k 0x3.8p+56L : 0x8.8bdd41bf4484605p+60L 1 : inexact-ok
+= lgamma tonearest ldbl-96-m68k 0x3.8p+56L : 0x8.8bdd41bf4484605p+60L 1 : inexact-ok
+= lgamma towardzero ldbl-96-m68k 0x3.8p+56L : 0x8.8bdd41bf4484605p+60L 1 : inexact-ok
+= lgamma upward ldbl-96-m68k 0x3.8p+56L : 0x8.8bdd41bf4484606p+60L 1 : inexact-ok
+= lgamma downward ldbl-128 0x3.8p+56L : 0x8.8bdd41bf44846050819264e2d568p+60L 1 : inexact-ok
+= lgamma tonearest ldbl-128 0x3.8p+56L : 0x8.8bdd41bf44846050819264e2d57p+60L 1 : inexact-ok
+= lgamma towardzero ldbl-128 0x3.8p+56L : 0x8.8bdd41bf44846050819264e2d568p+60L 1 : inexact-ok
+= lgamma upward ldbl-128 0x3.8p+56L : 0x8.8bdd41bf44846050819264e2d57p+60L 1 : inexact-ok
+= lgamma downward ldbl-128ibm 0x3.8p+56L : 0x8.8bdd41bf44846050819264e2d4p+60L 1 : inexact-ok
+= lgamma tonearest ldbl-128ibm 0x3.8p+56L : 0x8.8bdd41bf44846050819264e2d4p+60L 1 : inexact-ok
+= lgamma towardzero ldbl-128ibm 0x3.8p+56L : 0x8.8bdd41bf44846050819264e2d4p+60L 1 : inexact-ok
+= lgamma upward ldbl-128ibm 0x3.8p+56L : 0x8.8bdd41bf44846050819264e2d8p+60L 1 : inexact-ok
 lgamma 0x1p-5
 = lgamma downward flt-32 0x8p-8f : 0x3.72d02cp+0f 1 : inexact-ok
 = lgamma tonearest flt-32 0x8p-8f : 0x3.72d03p+0f 1 : inexact-ok
diff --git a/sysdeps/ieee754/flt-32/e_lgammaf_r.c b/sysdeps/ieee754/flt-32/e_lgammaf_r.c
index 0dba9af..4743bee 100644
--- a/sysdeps/ieee754/flt-32/e_lgammaf_r.c
+++ b/sysdeps/ieee754/flt-32/e_lgammaf_r.c
@@ -219,15 +219,15 @@ __ieee754_lgammaf_r(float x, int *signgamp)
 	    case 3: z *= (y+(float)2.0);	/* FALLTHRU */
 		    r += __ieee754_logf(z); break;
 	    }
-    /* 8.0 <= x < 2**58 */
-	} else if (ix < 0x5c800000) {
+    /* 8.0 <= x < 2**26 */
+	} else if (ix < 0x4c800000) {
 	    t = __ieee754_logf(x);
 	    z = one/x;
 	    y = z*z;
 	    w = w0+z*(w1+y*(w2+y*(w3+y*(w4+y*(w5+y*w6)))));
 	    r = (x-half)*(t-one)+w;
 	} else
-    /* 2**58 <= x <= inf */
+    /* 2**26 <= x <= inf */
 	    r =  x*(__ieee754_logf(x)-one);
 	if(hx<0) r = nadj - r;
 	return r;

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                            |    8 ++++++++
 NEWS                                 |    2 +-
 math/auto-libm-test-in               |    1 +
 math/auto-libm-test-out              |   25 +++++++++++++++++++++++++
 sysdeps/ieee754/flt-32/e_lgammaf_r.c |    6 +++---
 5 files changed, 38 insertions(+), 4 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


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