summaryrefslogtreecommitdiff
path: root/Objects/intobject.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2001-07-12 11:19:45 +0000
committerGuido van Rossum <guido@python.org>2001-07-12 11:19:45 +0000
commitb82fedc7d8789f82e04ad16fc0e516224a1fd0e3 (patch)
tree7b9fc1d2cccc6300e6ef9306ba5cae0a2901732f /Objects/intobject.c
parente9880c81b92a4bc72c541e8d89e1872b4816baa4 (diff)
downloadcpython-git-b82fedc7d8789f82e04ad16fc0e516224a1fd0e3.tar.gz
On int to the negative integral power, let float handle it instead of
raising an error. This was one of the two issues that the VPython folks were particularly problematic for their students. (The other one was integer division...) This implements (my) SF patch #440487.
Diffstat (limited to 'Objects/intobject.c')
-rw-r--r--Objects/intobject.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/Objects/intobject.c b/Objects/intobject.c
index de28156c06..b0ed82a785 100644
--- a/Objects/intobject.c
+++ b/Objects/intobject.c
@@ -510,13 +510,11 @@ int_pow(PyIntObject *v, PyIntObject *w, PyIntObject *z)
CONVERT_TO_LONG(v, iv);
CONVERT_TO_LONG(w, iw);
if (iw < 0) {
- if (iv)
- PyErr_SetString(PyExc_ValueError,
- "cannot raise integer to a negative power");
- else
- PyErr_SetString(PyExc_ZeroDivisionError,
- "cannot raise 0 to a negative power");
- return NULL;
+ /* Return a float. This works because we know that
+ this calls float_pow() which converts its
+ arguments to double. */
+ return PyFloat_Type.tp_as_number->nb_power(
+ (PyObject *)v, (PyObject *)w, (PyObject *)z);
}
if ((PyObject *)z != Py_None) {
CONVERT_TO_LONG(z, iz);