mirror of
https://github.com/fluencelabs/musl
synced 2025-06-27 13:41:57 +00:00
Merge remote branch 'nsz/master'
This commit is contained in:
@ -42,8 +42,6 @@ shift[2] = {
|
|||||||
0x1.0p63, -0x1.0p63
|
0x1.0p63, -0x1.0p63
|
||||||
#elif LDBL_MANT_DIG == 113
|
#elif LDBL_MANT_DIG == 113
|
||||||
0x1.0p112, -0x1.0p112
|
0x1.0p112, -0x1.0p112
|
||||||
#else
|
|
||||||
#error "Unsupported long double format"
|
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
static const float zero[2] = { 0.0, -0.0 };
|
static const float zero[2] = { 0.0, -0.0 };
|
||||||
|
@ -21,7 +21,6 @@
|
|||||||
* SYNOPSIS:
|
* SYNOPSIS:
|
||||||
*
|
*
|
||||||
* long double x, y, tgammal();
|
* long double x, y, tgammal();
|
||||||
* extern int signgam;
|
|
||||||
*
|
*
|
||||||
* y = tgammal( x );
|
* y = tgammal( x );
|
||||||
*
|
*
|
||||||
@ -29,10 +28,7 @@
|
|||||||
* DESCRIPTION:
|
* DESCRIPTION:
|
||||||
*
|
*
|
||||||
* Returns gamma function of the argument. The result is
|
* Returns gamma function of the argument. The result is
|
||||||
* correctly signed, and the sign (+1 or -1) is also
|
* correctly signed.
|
||||||
* returned in a global (extern) variable named signgam.
|
|
||||||
* This variable is also filled in by the logarithmic gamma
|
|
||||||
* function lgamma().
|
|
||||||
*
|
*
|
||||||
* Arguments |x| <= 13 are reduced by recurrence and the function
|
* Arguments |x| <= 13 are reduced by recurrence and the function
|
||||||
* approximated by a rational function of degree 7/8 in the
|
* approximated by a rational function of degree 7/8 in the
|
||||||
@ -209,9 +205,8 @@ static long double stirf(long double x)
|
|||||||
long double tgammal(long double x)
|
long double tgammal(long double x)
|
||||||
{
|
{
|
||||||
long double p, q, z;
|
long double p, q, z;
|
||||||
int i;
|
int i, sign;
|
||||||
|
|
||||||
signgam = 1;
|
|
||||||
if (isnan(x))
|
if (isnan(x))
|
||||||
return NAN;
|
return NAN;
|
||||||
if (x == INFINITY)
|
if (x == INFINITY)
|
||||||
@ -220,6 +215,7 @@ long double tgammal(long double x)
|
|||||||
return x - x;
|
return x - x;
|
||||||
q = fabsl(x);
|
q = fabsl(x);
|
||||||
if (q > 13.0) {
|
if (q > 13.0) {
|
||||||
|
sign = 1;
|
||||||
if (q > MAXGAML)
|
if (q > MAXGAML)
|
||||||
goto goverf;
|
goto goverf;
|
||||||
if (x < 0.0) {
|
if (x < 0.0) {
|
||||||
@ -228,7 +224,7 @@ long double tgammal(long double x)
|
|||||||
return (x - x) / (x - x);
|
return (x - x) / (x - x);
|
||||||
i = p;
|
i = p;
|
||||||
if ((i & 1) == 0)
|
if ((i & 1) == 0)
|
||||||
signgam = -1;
|
sign = -1;
|
||||||
z = q - p;
|
z = q - p;
|
||||||
if (z > 0.5L) {
|
if (z > 0.5L) {
|
||||||
p += 1.0;
|
p += 1.0;
|
||||||
@ -238,13 +234,13 @@ long double tgammal(long double x)
|
|||||||
z = fabsl(z) * stirf(q);
|
z = fabsl(z) * stirf(q);
|
||||||
if (z <= PIL/LDBL_MAX) {
|
if (z <= PIL/LDBL_MAX) {
|
||||||
goverf:
|
goverf:
|
||||||
return signgam * INFINITY;
|
return sign * INFINITY;
|
||||||
}
|
}
|
||||||
z = PIL/z;
|
z = PIL/z;
|
||||||
} else {
|
} else {
|
||||||
z = stirf(x);
|
z = stirf(x);
|
||||||
}
|
}
|
||||||
return signgam * z;
|
return sign * z;
|
||||||
}
|
}
|
||||||
|
|
||||||
z = 1.0;
|
z = 1.0;
|
||||||
@ -269,8 +265,6 @@ goverf:
|
|||||||
p = __polevll(x, P, 7);
|
p = __polevll(x, P, 7);
|
||||||
q = __polevll(x, Q, 8);
|
q = __polevll(x, Q, 8);
|
||||||
z = z * p / q;
|
z = z * p / q;
|
||||||
if(z < 0)
|
|
||||||
signgam = -1;
|
|
||||||
return z;
|
return z;
|
||||||
|
|
||||||
small:
|
small:
|
||||||
@ -279,7 +273,6 @@ small:
|
|||||||
if (x < 0.0) {
|
if (x < 0.0) {
|
||||||
x = -x;
|
x = -x;
|
||||||
q = z / (x * __polevll(x, SN, 8));
|
q = z / (x * __polevll(x, SN, 8));
|
||||||
signgam = -1;
|
|
||||||
} else
|
} else
|
||||||
q = z / (x * __polevll(x, S, 8));
|
q = z / (x * __polevll(x, S, 8));
|
||||||
return q;
|
return q;
|
||||||
|
Reference in New Issue
Block a user