From 2e54d9d146b34d7ad00e4394c9767f4319244cdf Mon Sep 17 00:00:00 2001 From: stijn Date: Tue, 8 Sep 2020 15:22:34 +0200 Subject: py: Fix handling of NaN in certain pow implementations. Adds a new compile-time option MICROPY_PY_MATH_POW_FIX_NAN for use with toolchains that don't handle pow-of-NaN correctly. --- py/objfloat.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'py/objfloat.c') diff --git a/py/objfloat.c b/py/objfloat.c index f1e401ecc..451609492 100644 --- a/py/objfloat.c +++ b/py/objfloat.c @@ -300,6 +300,12 @@ mp_obj_t mp_obj_float_binary_op(mp_binary_op_t op, mp_float_t lhs_val, mp_obj_t mp_raise_ValueError(MP_ERROR_TEXT("complex values not supported")); #endif } + #if MICROPY_PY_MATH_POW_FIX_NAN // Also see modmath.c. + if (lhs_val == MICROPY_FLOAT_CONST(1.0) || rhs_val == MICROPY_FLOAT_CONST(0.0)) { + lhs_val = MICROPY_FLOAT_CONST(1.0); + break; + } + #endif lhs_val = MICROPY_FLOAT_C_FUN(pow)(lhs_val, rhs_val); break; case MP_BINARY_OP_DIVMOD: { -- cgit v1.2.3