long rangeCount(long start, long end, long step) { // (1) count = ceiling ( (end - start) / step ) // (2) ceiling(a/b) = (a+b+o)/b where o=-1 for positive stepping and +1 for negative stepping // thus: count = end - start + step + o / step return Numbers.add(Numbers.add(Numbers.minus(end, start), step), this.step > 0 ? -1 : 1) / step; }
static public Number minus(long x, Object y){ return minus((Object)x,y); }
static public Number unchecked_minus(Object x, Object y){return minus(x,y);} static public Number unchecked_multiply(Object x, Object y){return multiply(x,y);}
static public double unchecked_minus(double x){return minus(x);} static public double unchecked_inc(double x){return inc(x);}
public Number remainder(Number x, Number y){ Ratio rx = toRatio(x); Ratio ry = toRatio(y); BigInteger q = rx.numerator.multiply(ry.denominator).divide( rx.denominator.multiply(ry.numerator)); Number ret = Numbers.minus(x, Numbers.multiply(q, y)); return normalizeRet(ret, x, y); }
static public Number unchecked_minus(Object x){return minus(x);} static public Number unchecked_inc(Object x){return inc(x);}
static public double unchecked_minus(double x, double y){return minus(x,y);} static public double unchecked_multiply(double x, double y){return multiply(x,y);}
static public Number minus(Object x, long y){ return minus(x,(Object)y); }
static public double unchecked_minus(Object x, double y){return minus(x,y);} static public double unchecked_multiply(Object x, double y){return multiply(x,y);}
static public Number unchecked_minus(Object x, long y){return minus(x,y);} static public Number unchecked_multiply(Object x, long y){return multiply(x,y);}
static public double unchecked_minus(double x, Object y){return minus(x,y);} static public double unchecked_multiply(double x, Object y){return multiply(x,y);}
static public double unchecked_minus(double x, long y){return minus(x,y);} static public double unchecked_multiply(double x, long y){return multiply(x,y);}
static public double minusP(double x, Object y){ return minus(x,((Number)y).doubleValue()); }
static public double minus(Object x, double y){ return minus(((Number)x).doubleValue(),y); }
static public double minusP(Object x, double y){ return minus(((Number)x).doubleValue(),y); }
static public double minus(double x, Object y){ return minus(x,((Number)y).doubleValue()); }
final public Number negate(Number x){ long val = x.longValue(); return num(Numbers.minus(val)); }
final public Number negate(Number x){ long val = x.longValue(); return num(Numbers.minus(val)); }
long rangeCount(long start, long end, long step) { // (1) count = ceiling ( (end - start) / step ) // (2) ceiling(a/b) = (a+b+o)/b where o=-1 for positive stepping and +1 for negative stepping // thus: count = end - start + step + o / step return Numbers.add(Numbers.add(Numbers.minus(end, start), step), this.step > 0 ? -1 : 1) / step; }
public Number remainder(Number x, Number y){ Ratio rx = toRatio(x); Ratio ry = toRatio(y); BigInteger q = rx.numerator.multiply(ry.denominator).divide( rx.denominator.multiply(ry.numerator)); Number ret = Numbers.minus(x, Numbers.multiply(q, y)); return normalizeRet(ret, x, y); }