summaryrefslogtreecommitdiffstats
path: root/Objects/floatobject.c
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2001-09-03 08:35:41 (GMT)
committerTim Peters <tim.peters@gmail.com>2001-09-03 08:35:41 (GMT)
commit32f453eaa476c78376cd721d29ba8ab726e400bb (patch)
treeaec8b2e54ec4a0a7cbd66569d3a8531db118f153 /Objects/floatobject.c
parent5d2b77cf31c5a3cbabc74936831480b9caea3a12 (diff)
downloadcpython-32f453eaa476c78376cd721d29ba8ab726e400bb.zip
cpython-32f453eaa476c78376cd721d29ba8ab726e400bb.tar.gz
cpython-32f453eaa476c78376cd721d29ba8ab726e400bb.tar.bz2
New restriction on pow(x, y, z): If z is not None, x and y must be of
integer types, and y must be >= 0. See discussion at http://sf.net/tracker/index.php?func=detail&aid=457066&group_id=5470&atid=105470
Diffstat (limited to 'Objects/floatobject.c')
-rw-r--r--Objects/floatobject.c22
1 files changed, 7 insertions, 15 deletions
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 39eba8e..8cd26b4 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -492,11 +492,13 @@ static PyObject *
float_pow(PyObject *v, PyObject *w, PyObject *z)
{
double iv, iw, ix;
- /* XXX Doesn't handle overflows if z!=None yet; it may never do so :(
- * The z parameter is really only going to be useful for integers and
- * long integers. Maybe something clever with logarithms could be done.
- * [AMK]
- */
+
+ if ((PyObject *)z != Py_None) {
+ PyErr_SetString(PyExc_TypeError,
+ "3rd argument to floating pow() must be None");
+ return NULL;
+ }
+
CONVERT_TO_DOUBLE(v, iv);
CONVERT_TO_DOUBLE(w, iw);
@@ -538,16 +540,6 @@ float_pow(PyObject *v, PyObject *w, PyObject *z)
PyErr_SetFromErrno(PyExc_OverflowError);
return NULL;
}
- if ((PyObject *)z != Py_None) {
- double iz;
- CONVERT_TO_DOUBLE(z, iz);
- PyFPE_START_PROTECT("pow", return 0)
- ix = fmod(ix, iz); /* XXX To Be Rewritten */
- if (ix != 0 && ((iv < 0 && iz > 0) || (iv > 0 && iz < 0) )) {
- ix += iz;
- }
- PyFPE_END_PROTECT(ix)
- }
return PyFloat_FromDouble(ix);
}