If *num* is null and *exp* is not a positive real number,
this method returns zero and sets :c:data:`errno` to :c:macro:`!EDOM`.
+ Set :c:data:`errno` to :c:macro:`!ERANGE` on overflows.
+
Complex Numbers as Python Objects
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
self.assertEqual(_py_c_pow(0j, -1)[1], errno.EDOM)
self.assertEqual(_py_c_pow(0j, 1j)[1], errno.EDOM)
- self.assertEqual(_py_c_pow(*[DBL_MAX+1j]*2)[0], complex(*[INF]*2))
+ max_num = DBL_MAX+1j
+ self.assertEqual(_py_c_pow(max_num, max_num),
+ (complex(INF, INF), errno.ERANGE))
+ self.assertEqual(_py_c_pow(max_num, 2),
+ (complex(INF, INF), errno.ERANGE))
def test_py_c_abs(self):
--- /dev/null
+Set :data:`errno` in :c:func:`_Py_c_pow` on overflows. Patch by Sergey B
+Kirpichev.
}
r.real = len*cos(phase);
r.imag = len*sin(phase);
+
+ _Py_ADJUST_ERANGE2(r.real, r.imag);
}
return r;
}
// a faster and more accurate algorithm.
if (b.imag == 0.0 && b.real == floor(b.real) && fabs(b.real) <= 100.0) {
p = c_powi(a, (long)b.real);
+ _Py_ADJUST_ERANGE2(p.real, p.imag);
}
else {
p = _Py_c_pow(a, b);
}
- _Py_ADJUST_ERANGE2(p.real, p.imag);
if (errno == EDOM) {
PyErr_SetString(PyExc_ZeroDivisionError,
"zero to a negative or complex power");