py/objcomplex: Correctly handle case of 0j to power of something.

0j to the power of negative now raises ZeroDivisionError, and 0j to the
power of positive returns 0.
This commit is contained in:
Damien George 2017-02-03 00:01:45 +11:00
parent 4b8ec5256d
commit 3ed0e5e5d4

View File

@ -222,8 +222,8 @@ mp_obj_t mp_obj_complex_binary_op(mp_uint_t op, mp_float_t lhs_real, mp_float_t
// = exp(x3)*(cos(y3) + i*sin(y3))
mp_float_t abs1 = MICROPY_FLOAT_C_FUN(sqrt)(lhs_real*lhs_real + lhs_imag*lhs_imag);
if (abs1 == 0) {
if (rhs_imag == 0) {
lhs_real = 1;
if (rhs_imag == 0 && rhs_real >= 0) {
lhs_real = 1 ? rhs_real == 0 : 0;
rhs_real = 0;
} else {
mp_raise_msg(&mp_type_ZeroDivisionError, "0.0 to a complex power");