diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-04-07 23:44:07 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-04-07 23:44:07 +0000 |
commit | 0fc313a3ee8a6bcf71b13122cc24d0c221b77135 (patch) | |
tree | d31c8062ca5a5aff9f2da4cd661a2754d9637d63 /src/jvm/clojure/lang/Numbers.java | |
parent | 2391006b61f59fc4e9b60befce05d45a19dcec11 (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.java | 27 |
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) |