py/modmath: Add option to work around -inf bug in a port's tgamma.

This is needed for a workaround on esp32 port (in child commit),
which produces incorrect results otherwise.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
This commit is contained in:
Angus Gratton 2024-08-06 09:59:22 +10:00 committed by Damien George
parent afba3e0540
commit b0c89377d0
2 changed files with 15 additions and 0 deletions

View File

@ -196,7 +196,17 @@ MATH_FUN_1(erf, erf)
// erfc(x): return the complementary error function of x
MATH_FUN_1(erfc, erfc)
// gamma(x): return the gamma function of x
#if MICROPY_PY_MATH_GAMMA_FIX_NEGINF
static mp_float_t MICROPY_FLOAT_C_FUN(tgamma_func)(mp_float_t x) {
if (isinf(x) && x < 0) {
math_error();
}
return MICROPY_FLOAT_C_FUN(tgamma)(x);
}
MATH_FUN_1(gamma, tgamma_func)
#else
MATH_FUN_1(gamma, tgamma)
#endif
// lgamma(x): return the natural logarithm of the gamma function of x
MATH_FUN_1(lgamma, lgamma)
#endif

View File

@ -1393,6 +1393,11 @@ typedef double mp_float_t;
#define MICROPY_PY_MATH_POW_FIX_NAN (0)
#endif
// Whether to provide fix for gamma(-inf) to raise ValueError
#ifndef MICROPY_PY_MATH_GAMMA_FIX_NEGINF
#define MICROPY_PY_MATH_GAMMA_FIX_NEGINF (0)
#endif
// Whether to provide "cmath" module
#ifndef MICROPY_PY_CMATH
#define MICROPY_PY_CMATH (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)