]> sourceware.org Git - glibc.git/commitdiff
[BZ #4407]
authorUlrich Drepper <drepper@redhat.com>
Sat, 6 Oct 2007 18:37:30 +0000 (18:37 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sat, 6 Oct 2007 18:37:30 +0000 (18:37 +0000)
* sysdeps/ieee754/dbl-64/e_lgamma_r.c: Fix *signgamp for -0.0.
* sysdeps/ieee754/flt-32/e_lgammaf_r.c: Likewise.
* sysdeps/ieee754/ldbl-96/e_lgammal_r.c: Likewise.
* math/libm-test.inc: Add test for this case.

Half the patch by Christian Iseli <christian.iseli@licr.org>.

ChangeLog
math/libm-test.inc
sysdeps/ieee754/dbl-64/e_lgamma_r.c
sysdeps/ieee754/flt-32/e_lgammaf_r.c
sysdeps/ieee754/ldbl-96/e_lgammal_r.c

index 08130dbfdd88f12ff41957f7d5e227f1cd9d0ee3..3c8b95d07d77749a19b2768b43633b8588af8068 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2007-10-06  Ulrich Drepper  <drepper@redhat.com>
 
+       [BZ #4407]
+       * sysdeps/ieee754/dbl-64/e_lgamma_r.c: Fix *signgamp for -0.0.
+       * sysdeps/ieee754/flt-32/e_lgammaf_r.c: Likewise.
+       * sysdeps/ieee754/ldbl-96/e_lgammal_r.c: Likewise.
+       * math/libm-test.inc: Add test for this case.
+
        [BZ #5010]
        * sunrpc/svc.c (struct svc_callout): Add sc_mapped element.
        (svc_register): Initialize sc_mapped.  Set to TRUE if call to
@@ -29,7 +35,7 @@
        * string/bits/string2.h (__strdup): Cast parameters to calloc to
        avoid warning with -Wconversion.
        (__strndup): Likewise.
-       Patch to 50% by Christian Iseli <christian.iseli@licr.org>.
+       Half the patch by Christian Iseli <christian.iseli@licr.org>.
 
        [BZ #5112]
        * nscd/connections.c (restart): Don't resync if database is
index 81dd364f77ffb66f3a6e02ff24261a95661b147c..da68d40bb475c59575e12775896254039bf138dc 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997-2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1997-2006, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@suse.de>, 1997.
 
@@ -3221,6 +3221,9 @@ lgamma_test (void)
 
   TEST_f_f (lgamma, plus_infty, plus_infty);
   TEST_f_f (lgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+  check_int ("signgam for lgamma(0) == 1", signgam, 1, 0, 0, 0);
+  TEST_f_f (lgamma, minus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+  check_int ("signgam for lgamma(-0) == -1", signgam, -1, 0, 0, 0);
   TEST_f_f (lgamma, nan_value, nan_value);
 
   /* lgamma (x) == +inf plus divide by zero exception for integer x <= 0.  */
index cc44b048f43d9ac4f9a5c9b1684898ad31755cdc..a298a5a2a4410a661329d36082cd74e48d3fb524 100644 (file)
@@ -228,7 +228,12 @@ static double zero=  0.00000000000000000000e+00;
        *signgamp = 1;
        ix = hx&0x7fffffff;
        if(ix>=0x7ff00000) return x*x;
-       if((ix|lx)==0) return one/fabs(x);
+       if((ix|lx)==0)
+         {
+           if (hx < 0)
+             *signgamp = -1;
+           return one/fabs(x);
+         }
        if(ix<0x3b900000) {     /* |x|<2**-70, return -log(|x|) */
            if(hx<0) {
                *signgamp = -1;
index 5ebebb77af7a677fb68f279eb9d61192b514e5e0..0ed2610085b3aad41988ad13459d00f36adb2fdb 100644 (file)
@@ -164,7 +164,12 @@ static float zero=  0.0000000000e+00;
        *signgamp = 1;
        ix = hx&0x7fffffff;
        if(ix>=0x7f800000) return x*x;
-       if(ix==0) return one/fabsf(x);
+       if(ix==0)
+         {
+           if (hx < 0)
+             *signgamp = -1;
+           return one/fabsf(x);
+         }
        if(ix<0x1c800000) {     /* |x|<2**-70, return -log(|x|) */
            if(hx<0) {
                *signgamp = -1;
index fecbee9b2a96ef3c0609caad5ddc6f8ee53723ec..36e336565c81c0cb56dd94fff4061e0bf09773e1 100644 (file)
@@ -11,9 +11,9 @@
 
 /* Long double expansions are
   Copyright (C) 2001 Stephen L. Moshier <moshier@na-net.ornl.gov>
-  and are incorporated herein by permission of the author.  The author 
+  and are incorporated herein by permission of the author.  The author
   reserves the right to distribute this material elsewhere under different
-  copying permissions.  These modifications are distributed here under 
+  copying permissions.  These modifications are distributed here under
   the following terms:
 
     This library is free software; you can redistribute it and/or
@@ -302,7 +302,11 @@ __ieee754_lgammal_r (x, signgamp)
   ix = se & 0x7fff;
 
   if ((ix | i0 | i1) == 0)
-    return one / fabsl (x);
+    {
+      if (se & 0x8000)
+       *signgamp = -1;
+      return one / fabsl (x);
+    }
 
   ix = (ix << 16) | (i0 >> 16);
 
This page took 0.062767 seconds and 5 git commands to generate.