diff options
| author | Guido van Rossum <guido@python.org> | 1991-05-28 21:57:39 +0000 |
|---|---|---|
| committer | Guido van Rossum <guido@python.org> | 1991-05-28 21:57:39 +0000 |
| commit | 70d934601f743afe0f9a75fef95d6c3e65ec9bfd (patch) | |
| tree | 49c4d5c007357d6cf9798e7c40d76825a96cc760 /Objects/floatobject.c | |
| parent | 4b9cf8eed98f6a2f35531921e92df8cc07d703d4 (diff) | |
| download | cpython-git-70d934601f743afe0f9a75fef95d6c3e65ec9bfd.tar.gz | |
Fix special cases in pow()
Diffstat (limited to 'Objects/floatobject.c')
| -rw-r--r-- | Objects/floatobject.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/Objects/floatobject.c b/Objects/floatobject.c index 0549990a1b..e2095d723c 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -223,8 +223,20 @@ float_pow(v, w) } iv = v->ob_fval; iw = ((floatobject *)w)->ob_fval; + /* Sort out special cases here instead of relying on pow() */ if (iw == 0.0) return newfloatobject(1.0); /* x**0 is 1, even 0**0 */ + if (iv == 0.0) { + if (iw < 0.0) { + err_setstr(RuntimeError, "0.0 to the negative power"); + return NULL; + } + return newfloatobject(0.0); + } + if (iv < 0.0) { + err_setstr(RuntimeError, "negative float to float power"); + return NULL; + } errno = 0; ix = pow(iv, iw); if (errno != 0) { |
