libm/math: set errno to ERANGE at gamma poles
For POSIX, gamma(i) (i non-positive integer) should set errno to ERANGE instead of EDOM. Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
b6cedcd9a4
commit
2daeea8884
|
@ -155,16 +155,10 @@ in terms of the base return values, although the <[signgam]> global for
|
|||
y = __ieee754_gamma_r(x,&(_REENT_SIGNGAM(_REENT)));
|
||||
if(_LIB_VERSION == _IEEE_) return y;
|
||||
if(!finite(y)&&finite(x)) {
|
||||
if(floor(x)==x&&x<=0.0) {
|
||||
/* gamma(-integer) or gamma(0) */
|
||||
errno = EDOM;
|
||||
} else {
|
||||
/* gamma(finite) overflow */
|
||||
errno = ERANGE;
|
||||
}
|
||||
return HUGE_VAL;
|
||||
} else
|
||||
return y;
|
||||
/* gamma(finite) overflow */
|
||||
errno = ERANGE;
|
||||
}
|
||||
return y;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -38,15 +38,10 @@
|
|||
y = __ieee754_lgamma_r(x,&(_REENT_SIGNGAM(_REENT)));
|
||||
if(_LIB_VERSION == _IEEE_) return y;
|
||||
if(!finite(y)&&finite(x)) {
|
||||
if(floor(x)==x&&x<=0.0)
|
||||
/* lgamma(-integer) */
|
||||
errno = EDOM;
|
||||
else
|
||||
/* lgamma(finite) overflow */
|
||||
errno = ERANGE;
|
||||
return HUGE_VAL;
|
||||
} else
|
||||
return y;
|
||||
/* lgamma(finite) overflow */
|
||||
errno = ERANGE;
|
||||
}
|
||||
return y;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -32,16 +32,10 @@
|
|||
y = __ieee754_gammaf_r(x,&(_REENT_SIGNGAM(_REENT)));
|
||||
if(_LIB_VERSION == _IEEE_) return y;
|
||||
if(!finitef(y)&&finitef(x)) {
|
||||
if(floorf(x)==x&&x<=0.0f) {
|
||||
/* gammaf(-integer) or gammaf(0) */
|
||||
errno = EDOM;
|
||||
} else {
|
||||
/* gammaf(finite) overflow */
|
||||
errno = ERANGE;
|
||||
}
|
||||
return HUGE_VALF;
|
||||
} else
|
||||
return y;
|
||||
/* gammaf(finite) overflow */
|
||||
errno = ERANGE;
|
||||
}
|
||||
return y;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -32,16 +32,10 @@
|
|||
y = __ieee754_lgammaf_r(x,&(_REENT_SIGNGAM(_REENT)));
|
||||
if(_LIB_VERSION == _IEEE_) return y;
|
||||
if(!finitef(y)&&finitef(x)) {
|
||||
if(floorf(x)==x&&x<=0.0f) {
|
||||
/* lgammaf(-integer) */
|
||||
errno = EDOM;
|
||||
} else {
|
||||
/* lgammaf(finite) overflow */
|
||||
errno = ERANGE;
|
||||
}
|
||||
return HUGE_VALF;
|
||||
} else
|
||||
return y;
|
||||
/* lgammaf(finite) overflow */
|
||||
errno = ERANGE;
|
||||
}
|
||||
return y;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue