mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-16 10:20:30 +00:00
Don't assume that int is signed 32-bits in one place. Keep assuming
that ints have >= 31 value bits elsewhere. s/int/int32_t/ seems to have been done too globally for all other files in msun/src before msun/ was imported into FreeBSD. Minor fixes in comments. e_lgamma_r.c: Describe special cases in more detail: - exception for lgamma(0) and lgamma(neg.integer) - lgamma(-Inf) = Inf. This is wrong but is required by C99 Annex F. I hope to change this.
This commit is contained in:
parent
361cf3bd02
commit
9698b3b564
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=169220
@ -76,10 +76,11 @@ static char rcsid[] = "$FreeBSD$";
|
||||
*
|
||||
* 5. Special Cases
|
||||
* lgamma(2+s) ~ s*(1-Euler) for tiny s
|
||||
* lgamma(1)=lgamma(2)=0
|
||||
* lgamma(x) ~ -log(x) for tiny x
|
||||
* lgamma(0) = lgamma(inf) = inf
|
||||
* lgamma(-integer) = +-inf
|
||||
* lgamma(1) = lgamma(2) = 0
|
||||
* lgamma(x) ~ -log(|x|) for tiny x
|
||||
* lgamma(0) = lgamma(neg.integer) = inf and raise divide-by-zero
|
||||
* lgamma(inf) = inf
|
||||
* lgamma(-inf) = inf (bug for bug compatible with C99!?)
|
||||
*
|
||||
*/
|
||||
|
||||
@ -205,11 +206,12 @@ double
|
||||
__ieee754_lgamma_r(double x, int *signgamp)
|
||||
{
|
||||
double t,y,z,nadj,p,p1,p2,p3,q,r,w;
|
||||
int i,hx,lx,ix;
|
||||
int32_t hx;
|
||||
int i,lx,ix;
|
||||
|
||||
EXTRACT_WORDS(hx,lx,x);
|
||||
|
||||
/* purge off +-inf, NaN, +-0, and negative arguments */
|
||||
/* purge off +-inf, NaN, +-0, tiny and negative arguments */
|
||||
*signgamp = 1;
|
||||
ix = hx&0x7fffffff;
|
||||
if(ix>=0x7ff00000) return x*x;
|
||||
|
@ -139,11 +139,12 @@ float
|
||||
__ieee754_lgammaf_r(float x, int *signgamp)
|
||||
{
|
||||
float t,y,z,nadj,p,p1,p2,p3,q,r,w;
|
||||
int i,hx,ix;
|
||||
int32_t hx;
|
||||
int i,ix;
|
||||
|
||||
GET_FLOAT_WORD(hx,x);
|
||||
|
||||
/* purge off +-inf, NaN, +-0, and negative arguments */
|
||||
/* purge off +-inf, NaN, +-0, tiny and negative arguments */
|
||||
*signgamp = 1;
|
||||
ix = hx&0x7fffffff;
|
||||
if(ix>=0x7f800000) return x*x;
|
||||
|
Loading…
Reference in New Issue
Block a user