Fix int/long typecase.  Add check for non-binary floating point.
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 8c7a9a3..5f42ca5 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -1158,7 +1158,7 @@
 {
 	double self;
 	double float_part;
-	long exponent;
+	int exponent;
 
 	PyObject *prev;
 	PyObject *py_exponent = NULL;
@@ -1172,6 +1172,13 @@
 	obj = call; \
 	Py_DECREF(prev); \
 
+#ifdef FLT_RADIX
+	if (FLT_RADIX != 2) {
+		/* This routine depends on base-2 floating_point. */
+		Py_INCREF(Py_NotImplemented);
+		return Py_NotImplemented;
+	}
+#endif
 	CONVERT_TO_DOUBLE(v, self);
 
 	if (Py_IS_INFINITY(self)) {
@@ -1202,7 +1209,7 @@
 
 	/* now self = numerator * 2**exponent exactly; fold in 2**exponent */
 	denominator = PyLong_FromLong(1);
-	py_exponent = PyLong_FromLong(labs(exponent));
+	py_exponent = PyLong_FromLong(labs((long)exponent));
 	if (py_exponent == NULL) goto error;
 	INPLACE_UPDATE(py_exponent,
 		       long_methods->nb_lshift(denominator, py_exponent));