]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
On long to the negative long power, let float handle it instead of
authorGuido van Rossum <guido@python.org>
Thu, 12 Jul 2001 11:21:17 +0000 (11:21 +0000)
committerGuido van Rossum <guido@python.org>
Thu, 12 Jul 2001 11:21:17 +0000 (11:21 +0000)
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.

Objects/longobject.c

index 048b8e56fc8a1bbb15a08703e3208adfb8c9c20c..85b26a3fe31b11e3dbb6c2a4b7fa6a772f561672 100644 (file)
@@ -1543,14 +1543,13 @@ long_pow(PyObject *v, PyObject *w, PyObject *x)
        
        size_b = b->ob_size;
        if (size_b < 0) {
-               if (a->ob_size)
-                       PyErr_SetString(PyExc_ValueError,
-                                       "long integer to a negative power");
-               else
-                       PyErr_SetString(PyExc_ZeroDivisionError,
-                                       "zero to a negative power");
-               z = NULL;
-               goto error;
+               /* Return a float.  This works because we know that
+                  this calls float_pow() which converts its
+                  arguments to double. */
+               Py_DECREF(a);
+               Py_DECREF(b);
+               Py_DECREF(c);
+               return PyFloat_Type.tp_as_number->nb_power(v, w, x);
        }
        z = (PyLongObject *)PyLong_FromLong(1L);
        for (i = 0; i < size_b; ++i) {