public Number dec(Number x){ long val = x.longValue(); return num(Numbers.dec(val)); }
public Number remainder(Number x, Number y){ return num(x.longValue() % y.longValue()); }
static public Number minusP(long x, long y){ long ret = x - y; if (((ret ^ x) < 0 && (ret ^ ~y) < 0)) return minusP((Number)x,(Number)y); return num(ret); }
static public Number minusP(long x){ if(x == Long.MIN_VALUE) return BigInt.fromBigInteger(BigInteger.valueOf(x).negate()); return num(-x); }
final public Number addP(Number x, Number y){ long lx = x.longValue(), ly = y.longValue(); long ret = lx + ly; if ((ret ^ lx) < 0 && (ret ^ ly) < 0) return BIGINT_OPS.add(x, y); return num(ret); }
final public Number negateP(Number x){ long val = x.longValue(); if(val > Long.MIN_VALUE) return num(-val); return BigInt.fromBigInteger(BigInteger.valueOf(val).negate()); } public Number inc(Number x){
public Number decP(Number x){ long val = x.longValue(); if(val > Long.MIN_VALUE) return num(val - 1); return BIGINT_OPS.dec(x); } }
static public Number incP(long x){ if(x == Long.MAX_VALUE) return BIGINT_OPS.inc(x); return num(x + 1); }
static public Number addP(long x, long y){ long ret = x + y; if ((ret ^ x) < 0 && (ret ^ y) < 0) return addP((Number)x,(Number)y); return num(ret); }
static public Number decP(long x){ if(x == Long.MIN_VALUE) return BIGINT_OPS.dec(x); return num(x - 1); }
@WarnBoxedMath(false) static public Number reduceBigInt(BigInt val){ if(val.bipart == null) return num(val.lpart); else return val.bipart; }
public Number incP(Number x){ long val = x.longValue(); if(val < Long.MAX_VALUE) return num(val + 1); return BIGINT_OPS.inc(x); }
final public Number negateP(Number x){ long val = x.longValue(); if(val > Long.MIN_VALUE) return num(-val); return BigInt.fromBigInteger(BigInteger.valueOf(val).negate()); } public Number inc(Number x){
final public Number multiplyP(Number x, Number y){ long lx = x.longValue(), ly = y.longValue(); if (lx == Long.MIN_VALUE && ly < 0) return BIGINT_OPS.multiply(x, y); long ret = lx * ly; if (ly != 0 && ret/ly != lx) return BIGINT_OPS.multiply(x, y); return num(ret); } static long gcd(long u, long v){
static public Number multiplyP(long x, long y){ if (x == Long.MIN_VALUE && y < 0) return multiplyP((Number)x,(Number)y); long ret = x * y; if (y != 0 && ret/y != x) return multiplyP((Number)x,(Number)y); return num(ret); }
public Object reduce(IFn f, Object start) { Object ret = f.invoke(start, Numbers.num(array[i])); for(int x = i + 1; x < array.length; x++) { if(RT.isReduced(ret)) return ((IDeref)ret).deref(); ret = f.invoke(ret, Numbers.num(array[x])); } if(RT.isReduced(ret)) return ((IDeref)ret).deref(); return ret; }
public Object reduce(IFn f, Object start) { Object ret = f.invoke(start, Numbers.num(array[i])); for(int x = i + 1; x < array.length; x++) { if(RT.isReduced(ret)) return ((IDeref)ret).deref(); ret = f.invoke(ret, Numbers.num(array[x])); } if(RT.isReduced(ret)) return ((IDeref)ret).deref(); return ret; }