summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/lang/Numbers.java12
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)