Test for negative # to the nonintegral float power here.
Expanded powi() in-line.
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 74ef26e..cc0b98a 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -338,18 +338,6 @@
 	return r;
 }
 
-static double powi(x, n)
-	double x;
-	long n;
-{
-	if (n > 10000 || n < -10000)
-		return pow(x, (double) n);
-	else if (n > 0)
-		return powu(x, n);
-	else
-		return 1./powu(x, -n);
-}
-
 static object *
 float_pow(v, w, z)
 	floatobject *v;
@@ -366,7 +354,7 @@
 	iv = v->ob_fval;
 	iw = ((floatobject *)w)->ob_fval;
 	intw = (long)iw;
-	if (iw == intw) {
+	if (iw == intw && -10000 < intw && intw < 10000) {
 		/* Sort out special cases here instead of relying on pow() */
 		if (intw == 0) { 		/* x**0 is 1, even 0**0 */
 		 	if ((object *)z!=None) {
@@ -377,17 +365,26 @@
 	    		return newfloatobject(ix); 
 		}
 		errno = 0;
-		ix = powi(iv, intw);
+		if (intw > 0)
+			ix = powu(iv, intw);
+		else
+			ix = 1./powu(iv, -intw);
 	}
 	else {
 		/* Sort out special cases here instead of relying on pow() */
 		if (iv == 0.0) {
 			if (iw < 0.0) {
-				err_setstr(ValueError, "0.0 to a negative power");
+				err_setstr(ValueError,
+					   "0.0 to a negative power");
 				return NULL;
 			}
 			return newfloatobject(0.0);
 		}
+		if (iv < 0.0) {
+			err_setstr(ValueError,
+				   "negative number to a float power");
+			return NULL;
+		}
 		errno = 0;
 		ix = pow(iv, iw);
 	}