mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
gh-119771: Set errno on overflows in _Py_c_pow() (#120256)
Before we did this in complex_pow() and behavior of the public C API function _Py_c_pow() was different from the pure-python pow().
This commit is contained in:
parent
81480e6edb
commit
8a284e1896
4 changed files with 12 additions and 2 deletions
|
@ -173,6 +173,8 @@ _Py_c_pow(Py_complex a, Py_complex b)
|
|||
}
|
||||
r.real = len*cos(phase);
|
||||
r.imag = len*sin(phase);
|
||||
|
||||
_Py_ADJUST_ERANGE2(r.real, r.imag);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
@ -567,12 +569,12 @@ complex_pow(PyObject *v, PyObject *w, PyObject *z)
|
|||
// 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");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue