diff options
-rw-r--r-- | src/jvm/clojure/lang/Numbers.java | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/jvm/clojure/lang/Numbers.java b/src/jvm/clojure/lang/Numbers.java index cf7f4042..043f9ae2 100644 --- a/src/jvm/clojure/lang/Numbers.java +++ b/src/jvm/clojure/lang/Numbers.java @@ -143,14 +143,14 @@ static public Number quotient(Number x, Number y){ Ops yops = ops(y); if(yops.isZero(y)) throw new ArithmeticException("Divide by zero"); - return ops(x).combine(yops).quotient(x, y); + return reduce(ops(x).combine(yops).quotient(x, y)); } static public Number remainder(Number x, Number y){ Ops yops = ops(y); if(yops.isZero(y)) throw new ArithmeticException("Divide by zero"); - return ops(x).combine(yops).remainder(x, y); + return reduce(ops(x).combine(yops).remainder(x, y)); } static Number quotient(double n, double d){ @@ -260,6 +260,14 @@ static public Number rationalize(Number x){ return x; } +static public Number reduce(Number val){ + if(val instanceof Long) + return reduce(val.longValue()); + else if (val instanceof BigInteger) + return reduce((BigInteger) val); + return val; +} + static public Number reduce(BigInteger val){ int bitLength = val.bitLength(); if(bitLength < 32) |