summaryrefslogtreecommitdiff
path: root/sysdeps/libm-ieee754/w_gamma.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1998-07-23 14:59:16 +0000
committerUlrich Drepper <drepper@redhat.com>1998-07-23 14:59:16 +0000
commitcc60175e8cecbedb4c555379c3c667c9cf9420fa (patch)
tree69af14220d49051875cbe973110661bcc80c7bdd /sysdeps/libm-ieee754/w_gamma.c
parent69050873152acb2d2bd2b77c82078259ed59e2e2 (diff)
Update.
1998-07-23 Ulrich Drepper <drepper@cygnus.com> * sysdeps/generic/glob.c: Fix two problems with GLOB_DOOFFS. Reported by bwelling@anomaly.munge.com [PR libc/720]. * sysdeps/libm-ieee754/k_standard.c: Return NAN for libm not in SVID more for gamma(x) with x interger <= 0. Reported by Stephen L Moshier <moshier@mediaone.net>. * math/libm-test.c (gamma_test): Add test for gamma(-1) and gamma(0). Correct test for SVID version of gamma. * sysdeps/libm-ieee754/w_gamma.c: Use correct matherr call in SVID emulation mode. * sysdeps/libm-ieee754/w_gammaf.c: Likewise. * sysdeps/libm-ieee754/w_gammal.c: Likewise. * string/string.h: Don't use string function optimization for C++ as long as we use macros.
Diffstat (limited to 'sysdeps/libm-ieee754/w_gamma.c')
-rw-r--r--sysdeps/libm-ieee754/w_gamma.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/sysdeps/libm-ieee754/w_gamma.c b/sysdeps/libm-ieee754/w_gamma.c
index 02a3d47669..3511b67d77 100644
--- a/sysdeps/libm-ieee754/w_gamma.c
+++ b/sysdeps/libm-ieee754/w_gamma.c
@@ -32,7 +32,18 @@ static char rcsid[] = "$NetBSD: w_gamma.c,v 1.7 1995/11/20 22:06:43 jtc Exp $";
double y;
#ifndef _IEEE_LIBM
if (_LIB_VERSION == _SVID_)
- y = __ieee754_lgamma_r(x,&signgam);
+ {
+ y = __ieee754_lgamma_r(x,&signgam);
+
+ if(!__finite(y)&&__finite(x)) {
+ if(__floor(x)==x&&x<=(double)0.0)
+ /* lgamma pole */
+ return __kernel_standard(x,x,15);
+ else
+ /* lgamma overflow */
+ return __kernel_standard(x,x,14);
+ }
+ }
else
{
#endif
@@ -43,14 +54,15 @@ static char rcsid[] = "$NetBSD: w_gamma.c,v 1.7 1995/11/20 22:06:43 jtc Exp $";
return y;
#else
if(_LIB_VERSION == _IEEE_) return y;
- }
- if(!__finite(y)&&__finite(x)) {
- if(__floor(x)==x&&x<=0.0)
+
+ if(!__finite(y)&&__finite(x)) {
+ if(__floor(x)==x&&x<=0.0)
return __kernel_standard(x,x,41); /* gamma pole */
- else
+ else
return __kernel_standard(x,x,40); /* gamma overflow */
- } else
- return y;
+ }
+ }
+ return y;
#endif
}
weak_alias (__gamma, gamma)