summaryrefslogtreecommitdiff
path: root/src/jvm/clojure/lang/Numbers.java
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-04-07 23:44:07 +0000
committerRich Hickey <richhickey@gmail.com>2008-04-07 23:44:07 +0000
commit0fc313a3ee8a6bcf71b13122cc24d0c221b77135 (patch)
treed31c8062ca5a5aff9f2da4cd661a2754d9637d63 /src/jvm/clojure/lang/Numbers.java
parent2391006b61f59fc4e9b60befce05d45a19dcec11 (diff)
new numbers - all Num derivees should be not-in-use, all numbers are Java's boxed Numbers, + Ratio, added support for BigDecimal
Diffstat (limited to 'src/jvm/clojure/lang/Numbers.java')
-rw-r--r--src/jvm/clojure/lang/Numbers.java27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/jvm/clojure/lang/Numbers.java b/src/jvm/clojure/lang/Numbers.java
index d40cc70e..9ae8e06c 100644
--- a/src/jvm/clojure/lang/Numbers.java
+++ b/src/jvm/clojure/lang/Numbers.java
@@ -123,6 +123,11 @@ static Number remainder(double n, double d){
}
}
+static public boolean equiv(Object x, Object y){
+ return y instanceof Number && x instanceof Number
+ && equiv((Number) x, (Number) y);
+ }
+
static public boolean equiv(Number x, Number y){
return ops(x).combine(ops(y)).equiv(x, y);
}
@@ -131,10 +136,18 @@ static public boolean lt(Number x, Number y){
return ops(x).combine(ops(y)).lt(x, y);
}
+static public boolean lte(Number x, Number y){
+ return !ops(x).combine(ops(y)).lt(y, x);
+}
+
static public boolean gt(Number x, Number y){
return ops(x).combine(ops(y)).lt(y, x);
}
+static public boolean gte(Number x, Number y){
+ return !ops(x).combine(ops(y)).lt(x, y);
+}
+
static public int compare(Number x, Number y){
Ops ops = ops(x).combine(ops(y));
if(ops.lt(x,y))
@@ -540,17 +553,17 @@ final static class BigIntegerOps implements Ops{
final public Ops opsWith(BigDecimalOps x){return BIGDECIMAL_OPS;}
public boolean isZero(Number x){
- BigInteger bx = (BigInteger) x;
+ BigInteger bx = toBigInteger(x);
return bx.signum() == 0;
}
public boolean isPos(Number x){
- BigInteger bx = (BigInteger) x;
+ BigInteger bx = toBigInteger(x);
return bx.signum() > 0;
}
public boolean isNeg(Number x){
- BigInteger bx = (BigInteger) x;
+ BigInteger bx = toBigInteger(x);
return bx.signum() < 0;
}
@@ -584,16 +597,16 @@ final static class BigIntegerOps implements Ops{
//public Number subtract(Number x, Number y);
final public Number negate(Number x){
- return ((BigInteger)x).negate();
+ return toBigInteger(x).negate();
}
public Number inc(Number x){
- BigInteger bx = (BigInteger) x;
+ BigInteger bx = toBigInteger(x);
return reduce(bx.add(BigInteger.ONE));
}
public Number dec(Number x){
- BigInteger bx = (BigInteger) x;
+ BigInteger bx = toBigInteger(x);
return reduce(bx.subtract(BigInteger.ONE));
}
}
@@ -687,6 +700,8 @@ static Ops ops(Object x){
return FLOAT_OPS;
else if(xc == BigInteger.class)
return BIGINTEGER_OPS;
+ else if(xc == Long.class)
+ return BIGINTEGER_OPS;
else if(xc == Ratio.class)
return RATIO_OPS;
else if(xc == BigDecimal.class)