Fixed div() and ldiv() for machines with -1/2 = -1
authorceriel <none@none>
Tue, 26 Oct 1993 13:58:04 +0000 (13:58 +0000)
committerceriel <none@none>
Tue, 26 Oct 1993 13:58:04 +0000 (13:58 +0000)
lang/cem/libcc.ansi/stdlib/div.c
lang/cem/libcc.ansi/stdlib/ldiv.c

index 79c35a3..cdb8ecc 100644 (file)
@@ -6,26 +6,18 @@
 
 #include       <stdlib.h>
 
-static int tmp = -1;
-
 div_t
 div(register int numer, register int denom)
 {
        div_t r;
 
-       /* The assignment of tmp should not be optimized !! */
-       if (tmp == -1) {
-               tmp = (tmp / 2 == 0);
-       }
-       if (numer == 0) {
-               r.quot = numer / denom;         /* might trap if denom == 0 */
-               r.rem = numer % denom;
-       } else if ( !tmp && ((numer < 0) != (denom < 0))) {
-               r.quot = (numer / denom) + 1;
-               r.rem = numer - (numer / denom + 1) * denom;
-       } else {
-               r.quot = numer / denom;
-               r.rem = numer % denom;
+       r.quot = numer / denom;         /* might trap if denom == 0 */
+       r.rem = numer % denom;
+
+       if (r.rem != 0 && (numer > 0) != (r.rem > 0)) {
+               r.quot++;
+               r.rem -= denom;
        }
+
        return r;
 }
index 42c7619..4f5a175 100644 (file)
@@ -6,26 +6,18 @@
 
 #include       <stdlib.h>
 
-static long tmp = -1;
-
 ldiv_t
 ldiv(register long numer, register long denom)
 {
        ldiv_t r;
 
-       /* The assignment of tmp should not be optimized !! */
-       if (tmp == -1) {
-               tmp = (tmp / 2 == 0);
-       }
-       if (numer == 0) {
-               r.quot = numer / denom;         /* might trap if denom == 0 */
-               r.rem = numer % denom;
-       } else if ( !tmp && ((numer < 0) != (denom < 0))) {
-               r.quot = (numer / denom) + 1;
-               r.rem = numer - (numer / denom + 1) * denom;
-       } else {
-               r.quot = numer / denom;
-               r.rem = numer % denom;
+       r.quot = numer / denom;         /* might trap if denom == 0 */
+       r.rem = numer % denom;
+
+       if (r.rem != 0 && (numer > 0) != (r.rem > 0)) {
+               r.quot++;
+               r.rem -= denom;
        }
+
        return r;
 }