2005-12-13 Ulrich Drepper <drepper@redhat.com>
[platform/upstream/linaro-glibc.git] / math / w_tgammaf.c
1 /* w_gammaf.c -- float version of w_gamma.c.
2  * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
3  */
4
5 /*
6  * ====================================================
7  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
8  *
9  * Developed at SunPro, a Sun Microsystems, Inc. business.
10  * Permission to use, copy, modify, and distribute this
11  * software is freely granted, provided that this notice
12  * is preserved.
13  * ====================================================
14  */
15
16 #if defined(LIBM_SCCS) && !defined(lint)
17 static char rcsid[] = "$NetBSD: w_gammaf.c,v 1.4 1995/11/20 22:06:48 jtc Exp $";
18 #endif
19
20 #include <math.h>
21 #include "math_private.h"
22
23 #ifdef __STDC__
24         float __tgammaf(float x)
25 #else
26         float __tgammaf(x)
27         float x;
28 #endif
29 {
30         float y;
31         int local_signgam;
32         y = __ieee754_gammaf_r(x,&local_signgam);
33         if (local_signgam < 0) y = -y;
34 #ifdef _IEEE_LIBM
35         return y;
36 #else
37         if(_LIB_VERSION == _IEEE_) return y;
38
39         if(!__finitef(y)&&__finitef(x)) {
40           if (x == (float)0.0)
41             /* tgammaf pole */
42             return (float)__kernel_standard((double)x,(double)x,150);
43           else if(__floorf(x)==x&&x<(float)0.0)
44             /* tgammaf domain */
45             return (float)__kernel_standard((double)x,(double)x,141);
46           else
47             /* tgammaf overflow */
48             return (float)__kernel_standard((double)x,(double)x,140);
49         }
50         return y;
51 #endif
52 }
53 weak_alias (__tgammaf, tgammaf)