Commit Graph

5 Commits

Author SHA1 Message Date
Paul Zimmermann 4bb6581aa8 fixes to make compilation succeeds 2020-12-18 10:06:31 +01:00
Jeff Johnston b2f3d593ff Update gamma functions from code in picolibc
- fixes issue with inf sign when x is -0
2020-12-17 16:23:43 -05:00
Keith Packard via Newlib 1f8e5847df libm: Fix 'gamma' and 'gammaf' functions. Clean up other gamma code. [v2]
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
2020-09-04 21:27:11 +02:00
Jeff Johnston 47235a60ab 2011-01-12 Ralf Corsépius <ralf.corsepius@rtems.org>
* libm/math/w_tgamma.c: Only build ifndef _DOUBLE_IS_32BITS.
        * libm/math/wf_tgamma.c: Map tgamma to tgammaf, ifdef _DOUBLE_IS_32BITS.
2011-01-12 22:25:15 +00:00
Thomas Fitzsimmons 0953fe640f * libm/common/s_fdim.c: New file.
* libm/common/s_fma.c: Likewise.
	* libm/common/s_fmax.c: Likewise.
	* libm/common/s_fmin.c: Likewise.
	* libm/common/s_fpclassify.c: Likewise.
	* libm/common/s_lrint.c: Likewise.
	* libm/common/s_lround.c: Likewise.
	* libm/common/s_nearbyint.c: Likewise.
	* libm/common/s_remquo.c: Likewise.
	* libm/common/s_round.c: Likewise.
	* libm/common/s_scalbln.c: Likewise.
	* libm/common/s_signbit.c: Likewise.
	* libm/common/s_trunc.c: Likewise.
	* libm/common/sf_fdim.c: Likewise.
	* libm/common/sf_fma.c: Likewise.
	* libm/common/sf_fmax.c: Likewise.
	* libm/common/sf_fmin.c: Likewise.
	* libm/common/sf_lrint.c: Likewise.
	* libm/common/sf_lround.c: Likewise.
	* libm/common/sf_nearbyint.c: Likewise.
	* libm/common/sf_remquo.c: Likewise.
	* libm/common/sf_round.c: Likewise.
	* libm/common/sf_scalbln.c: Likewise.
	* libm/common/sf_trunc.c: Likewise.
	* libm/math/w_exp2.c: Likewise.
	* libm/math/w_tgamma.c: Likewise.
	* libm/math/wf_exp2.c: Likewise.
	* libm/math/wf_tgamma.c: Likewise.
	* libm/mathfp/s_exp2.c: Likewise.
	* libm/mathfp/s_tgamma.c: Likewise.
	* libm/mathfp/sf_exp2.c: Likewise.
	* libm/mathfp/sf_tgamma.c: Likewise.
	* libm/math/er_gamma.c: Fix return value.
	* libm/math/erf_gamma.c: Likewise.
	* libm/mathfp/er_gamma.c: Likewise.
	* libm/mathfp/erf_gamma.c: Likewise.
	* libc/include/math.h (!__STRICT_ANSI__): Include ISOC99-specific
	declarations and macros.
	Regenerated all Makefile.in, aclocal.m4 and configure files to
	use new libtool macros in top-level libtool.m4
2002-06-07 21:59:57 +00:00