diff --git a/py/objfloat.c b/py/objfloat.c
index 75212a4d22bd23660c744427bf3f3dd30d52b70a..e4d5a657010856cd7f6e20d8d41f68b4b8bde2ba 100644
--- a/py/objfloat.c
+++ b/py/objfloat.c
@@ -293,7 +293,7 @@ mp_obj_t mp_obj_float_binary_op(mp_binary_op_t op, mp_float_t lhs_val, mp_obj_t
             break;
         case MP_BINARY_OP_POWER:
         case MP_BINARY_OP_INPLACE_POWER:
-            if (lhs_val == 0 && rhs_val < 0) {
+            if (lhs_val == 0 && rhs_val < 0 && !isinf(rhs_val)) {
                 goto zero_division_error;
             }
             if (lhs_val < 0 && rhs_val != MICROPY_FLOAT_C_FUN(floor)(rhs_val)) {
diff --git a/tests/float/builtin_float_pow.py b/tests/float/builtin_float_pow.py
new file mode 100644
index 0000000000000000000000000000000000000000..2de1b481763f3a4b9cf5731c82c7dbf7fe937878
--- /dev/null
+++ b/tests/float/builtin_float_pow.py
@@ -0,0 +1,11 @@
+# test builtin pow function with float args
+
+print(pow(0.0, 0.0))
+print(pow(0, 1.0))
+print(pow(1.0, 1))
+print(pow(2.0, 3.0))
+print(pow(2.0, -4.0))
+
+print(pow(0.0, float('inf')))
+print(pow(0.0, float('-inf')))
+print(pow(0.0, float('nan')))