]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Get rid of redundant type checks.
authorGuido van Rossum <guido@python.org>
Sun, 26 Jan 1992 18:16:35 +0000 (18:16 +0000)
committerGuido van Rossum <guido@python.org>
Sun, 26 Jan 1992 18:16:35 +0000 (18:16 +0000)
Define % operator similar to int%int.

Objects/floatobject.c

index 43cefda562cd4f0cbd25acb6058dd99f4d0db5bb..7af5cd1ed497eac42e6243b8dc94c17517b681c2 100644 (file)
@@ -139,86 +139,70 @@ float_compare(v, w)
 static object *
 float_add(v, w)
        floatobject *v;
-       object *w;
+       floatobject *w;
 {
-       if (!is_floatobject(w)) {
-               err_badarg();
-               return NULL;
-       }
-       return newfloatobject(v->ob_fval + ((floatobject *)w) -> ob_fval);
+       return newfloatobject(v->ob_fval + w->ob_fval);
 }
 
 static object *
 float_sub(v, w)
        floatobject *v;
-       object *w;
+       floatobject *w;
 {
-       if (!is_floatobject(w)) {
-               err_badarg();
-               return NULL;
-       }
-       return newfloatobject(v->ob_fval - ((floatobject *)w) -> ob_fval);
+       return newfloatobject(v->ob_fval - w->ob_fval);
 }
 
 static object *
 float_mul(v, w)
        floatobject *v;
-       object *w;
+       floatobject *w;
 {
-       if (!is_floatobject(w)) {
-               err_badarg();
-               return NULL;
-       }
-       return newfloatobject(v->ob_fval * ((floatobject *)w) -> ob_fval);
+       return newfloatobject(v->ob_fval * w->ob_fval);
 }
 
 static object *
 float_div(v, w)
        floatobject *v;
-       object *w;
+       floatobject *w;
 {
-       if (!is_floatobject(w)) {
-               err_badarg();
-               return NULL;
-       }
-       if (((floatobject *)w) -> ob_fval == 0) {
+       if (w->ob_fval == 0) {
                err_setstr(ZeroDivisionError, "float division");
                return NULL;
        }
-       return newfloatobject(v->ob_fval / ((floatobject *)w) -> ob_fval);
+       return newfloatobject(v->ob_fval / w->ob_fval);
 }
 
 static object *
 float_rem(v, w)
        floatobject *v;
-       object *w;
+       floatobject *w;
 {
-       double wx;
-       if (!is_floatobject(w)) {
-               err_badarg();
-               return NULL;
-       }
-       wx = ((floatobject *)w) -> ob_fval;
+       double vx, wx;
+       double div, mod;
+       wx = w->ob_fval;
        if (wx == 0.0) {
-               err_setstr(ZeroDivisionError, "float remainder");
+               err_setstr(ZeroDivisionError, "float modulo");
                return NULL;
        }
-       return newfloatobject(fmod(v->ob_fval, wx));
+       vx = v->ob_fval;
+       mod = fmod(vx, wx);
+       div = (vx - mod) / wx;
+       if (wx*mod < 0) {
+               mod += wx;
+               div -= 1.0;
+       }
+       return newfloatobject(mod);
 }
 
 static object *
 float_divmod(v, w)
        floatobject *v;
-       object *w;
+       floatobject *w;
 {
        double vx, wx;
        double div, mod;
        object *t;
-       if (!is_floatobject(w)) {
-               err_badarg();
-               return NULL;
-       }
-       wx = ((floatobject *)w) -> ob_fval;
+       wx = w->ob_fval;
        if (wx == 0.0) {
                err_setstr(ZeroDivisionError, "float divmod()");
                return NULL;
@@ -245,15 +229,11 @@ float_divmod(v, w)
 static object *
 float_pow(v, w)
        floatobject *v;
-       object *w;
+       floatobject *w;
 {
        double iv, iw, ix;
-       if (!is_floatobject(w)) {
-               err_badarg();
-               return NULL;
-       }
        iv = v->ob_fval;
-       iw = ((floatobject *)w)->ob_fval;
+       iw = 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 */
@@ -347,10 +327,3 @@ typeobject Floattype = {
        0,                      /*tp_as_sequence*/
        0,                      /*tp_as_mapping*/
 };
-
-/*
-XXX This is not enough.  Need:
-- automatic casts for mixed arithmetic (3.1 * 4)
-- mixed comparisons (!)
-- look at other uses of ints that could be extended to floats
-*/