aboutsummaryrefslogtreecommitdiff
path: root/py/objfloat.c
diff options
context:
space:
mode:
authorstijn <stijn@ignitron.net>2020-09-08 15:22:34 +0200
committerDamien George <damien@micropython.org>2020-09-11 10:04:57 +1000
commit2e54d9d146b34d7ad00e4394c9767f4319244cdf (patch)
treeb6d56e3d53b9fef5d5898964d7bdd086e23016d5 /py/objfloat.c
parent8d5a40c86e384bf3cddb2f687374e0bb1ae6df7d (diff)
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.
Diffstat (limited to 'py/objfloat.c')
-rw-r--r--py/objfloat.c6
1 files changed, 6 insertions, 0 deletions
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: {