summaryrefslogtreecommitdiffstatshomepage
path: root/py/objint_longlong.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2017-07-25 11:49:22 +1000
committerDamien George <damien.p.george@gmail.com>2017-07-25 11:49:22 +1000
commit04552ff71b6c722b21597d93481f024c72457cef (patch)
treefdbc66843e079a78cbf964aa6308ab5db78a42d1 /py/objint_longlong.c
parent4d1fb6107fdedb0dda8dfb1491c033bf731222c6 (diff)
downloadmicropython-04552ff71b6c722b21597d93481f024c72457cef.tar.gz
micropython-04552ff71b6c722b21597d93481f024c72457cef.zip
py: Implement raising a big-int to a negative power.
Before this patch raising a big-int to a negative power would just return 0. Now it returns a floating-point number with the correct value.
Diffstat (limited to 'py/objint_longlong.c')
-rw-r--r--py/objint_longlong.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/py/objint_longlong.c b/py/objint_longlong.c
index eb80407bcb..1d184a7dc2 100644
--- a/py/objint_longlong.c
+++ b/py/objint_longlong.c
@@ -191,6 +191,13 @@ mp_obj_t mp_obj_int_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
case MP_BINARY_OP_POWER:
case MP_BINARY_OP_INPLACE_POWER: {
+ if (rhs_val < 0) {
+ #if MICROPY_PY_BUILTINS_FLOAT
+ return mp_obj_float_binary_op(op, lhs_val, rhs_in);
+ #else
+ mp_raise_ValueError("negative power with no float support");
+ #endif
+ }
long long ans = 1;
while (rhs_val > 0) {
if (rhs_val & 1) {