The current gamma, gamma_r, gammaf and gammaf_r functions return
|gamma(x)| instead of ln(|gamma(x)|) due to a change made back in 2002
to the __ieee754_gamma_r implementation. This patch fixes that, making
all of these functions map too their lgamma equivalents.
To fix the underlying bug, the __ieee754_gamma functions have been
changed to return gamma(x), removing the _r variants as those are no
longer necessary. Their names have been changed to __ieee754_tgamma to
avoid potential confusion from users.
Now that the __ieee754_tgamma functions return the correctly signed
value, the tgamma functions have been modified to use them.
libm.a now exposes the following gamma functions:
ln(|gamma(x)|):
__ieee754_lgamma_r
__ieee754_lgammaf_r
lgamma
lgamma_r
gamma
gamma_r
lgammaf
lgammaf_r
gammaf
gammaf_r
lgammal (on machines where long double is double)
gamma(x):
__ieee754_tgamma
__ieee754_tgammaf
tgamma
tgammaf
tgammal (on machines where long double is double)
Additional aliases for any of the above functions can be added if
necessary; in particular, I'm not sure if we need to include
__ieee754_gamma*_r functions (which would return ln(|(gamma(x)|).
Signed-off-by: Keith Packard <keithp@keithp.com>
----
v2:
Switch commit message to ASCII
|
||
|---|---|---|
| .. | ||
| Makefile.am | ||
| Makefile.in | ||
| math_private.h | ||
| s_cacos.c | ||
| s_cacosf.c | ||
| s_cacosh.c | ||
| s_cacoshf.c | ||
| s_cacoshl.c | ||
| s_cacosl.c | ||
| s_casin.c | ||
| s_casinf.c | ||
| s_casinh.c | ||
| s_casinhf.c | ||
| s_casinhl.c | ||
| s_casinl.c | ||
| s_catan.c | ||
| s_catanf.c | ||
| s_catanh.c | ||
| s_catanhf.c | ||
| s_catanhl.c | ||
| s_catanl.c | ||
| s_cbrtl.c | ||
| s_ccos.c | ||
| s_ccosf.c | ||
| s_ccosh.c | ||
| s_ccoshf.c | ||
| s_ccoshl.c | ||
| s_ccosl.c | ||
| s_cexp.c | ||
| s_cexpf.c | ||
| s_cexpl.c | ||
| s_clog.c | ||
| s_clog10.c | ||
| s_clog10f.c | ||
| s_clog10l.c | ||
| s_clogf.c | ||
| s_clogl.c | ||
| s_cpow.c | ||
| s_cpowf.c | ||
| s_cpowl.c | ||
| s_cproj.c | ||
| s_cprojf.c | ||
| s_cprojl.c | ||
| s_csin.c | ||
| s_csinf.c | ||
| s_csinh.c | ||
| s_csinhf.c | ||
| s_csinhl.c | ||
| s_csinl.c | ||
| s_csqrt.c | ||
| s_csqrtf.c | ||
| s_csqrtl.c | ||
| s_ctan.c | ||
| s_ctanf.c | ||
| s_ctanh.c | ||
| s_ctanhf.c | ||
| s_ctanhl.c | ||
| s_ctanl.c | ||