about summary refs log tree commit diff
path: root/sysdeps/libm-ieee754/w_gamma.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/libm-ieee754/w_gamma.c')
-rw-r--r--sysdeps/libm-ieee754/w_gamma.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/sysdeps/libm-ieee754/w_gamma.c b/sysdeps/libm-ieee754/w_gamma.c
index 49e4bcf3c3..87a3408c3f 100644
--- a/sysdeps/libm-ieee754/w_gamma.c
+++ b/sysdeps/libm-ieee754/w_gamma.c
@@ -15,16 +15,13 @@ static char rcsid[] = "$NetBSD: w_gamma.c,v 1.7 1995/11/20 22:06:43 jtc Exp $";
 #endif
 
 /* double gamma(double x)
- * Return the logarithm of the Gamma function of x.
- *
- * Method: call gamma_r
+ * Return  the logarithm of the Gamma function of x or the Gamma function of x,
+ * depending on the library mode.
  */
 
 #include "math.h"
 #include "math_private.h"
 
-extern int signgam;
-
 #ifdef __STDC__
 	double __gamma(double x)
 #else
@@ -32,12 +29,19 @@ extern int signgam;
 	double x;
 #endif
 {
+	int signgam;
+        double y;
+	if (_LIB_VERSION == _SVID_)
+	  y = __ieee754_lgamma_r(x,&signgam);
+	else
+	  {
+	    y = __ieee754_gamma_r(x,&signgam);
+	    if (signgam < 0) y = -y;
 #ifdef _IEEE_LIBM
-	return __ieee754_lgamma_r(x,&signgam);
+	    return y;
 #else
-        double y;
-        y = __ieee754_lgamma_r(x,&signgam);
-        if(_LIB_VERSION == _IEEE_) return y;
+	    if(_LIB_VERSION == _IEEE_) return y;
+	  }
         if(!__finite(y)&&__finite(x)) {
             if(__floor(x)==x&&x<=0.0)
                 return __kernel_standard(x,x,41); /* gamma pole */