static public Number divide(Object x, long y){ return divide(x,(Object)y); }
static public Number divide(long x, Object y){ return divide((Object)x,y); }
public Number divide(Number x, Number y){ return Numbers.divide(toBigInteger(x), toBigInteger(y)); }
static public Number divide(long x, long y){ return divide((Number)x, (Number)y); }
static public Number rationalize(Number x){ if(x instanceof Float || x instanceof Double) return rationalize(BigDecimal.valueOf(x.doubleValue())); else if(x instanceof BigDecimal) { BigDecimal bx = (BigDecimal) x; BigInteger bv = bx.unscaledValue(); int scale = bx.scale(); if(scale < 0) return BigInt.fromBigInteger(bv.multiply(BigInteger.TEN.pow(-scale))); else return divide(bv, BigInteger.TEN.pow(scale)); } return x; }
@WarnBoxedMath(false) static BigDecimal toBigDecimal(Object x){ if(x instanceof BigDecimal) return (BigDecimal) x; else if(x instanceof BigInt) { BigInt bi = (BigInt) x; if(bi.bipart == null) return BigDecimal.valueOf(bi.lpart); else return new BigDecimal(bi.bipart); } else if(x instanceof BigInteger) return new BigDecimal((BigInteger) x); else if(x instanceof Double) return new BigDecimal(((Number) x).doubleValue()); else if(x instanceof Float) return new BigDecimal(((Number) x).doubleValue()); else if(x instanceof Ratio) { Ratio r = (Ratio)x; return (BigDecimal)divide(new BigDecimal(r.numerator), r.denominator); } else return BigDecimal.valueOf(((Number) x).longValue()); }
if (numerator.startsWith("+")) numerator = numerator.substring(1); return Numbers.divide(Numbers.reduceBigInt(BigInt.fromBigInteger(new BigInteger(numerator))), Numbers.reduceBigInt(BigInt.fromBigInteger(new BigInteger(m.group(2)))));
@WarnBoxedMath(false) static public Number rationalize(Number x){ if(x instanceof Float || x instanceof Double) return rationalize(BigDecimal.valueOf(x.doubleValue())); else if(x instanceof BigDecimal) { BigDecimal bx = (BigDecimal) x; BigInteger bv = bx.unscaledValue(); int scale = bx.scale(); if(scale < 0) return BigInt.fromBigInteger(bv.multiply(BigInteger.TEN.pow(-scale))); else return divide(bv, BigInteger.TEN.pow(scale)); } return x; }
final public Number multiply(Number x, Number y){ Ratio rx = toRatio(x); Ratio ry = toRatio(y); Number ret = Numbers.divide(ry.numerator.multiply(rx.numerator) , ry.denominator.multiply(rx.denominator)); return normalizeRet(ret, x, y); }
public Number divide(Number x, Number y){ Ratio rx = toRatio(x); Ratio ry = toRatio(y); Number ret = Numbers.divide(ry.denominator.multiply(rx.numerator) , ry.numerator.multiply(rx.denominator)); return normalizeRet(ret, x, y); }
public Number divide(Number x, Number y){ return Numbers.divide(toBigInteger(x), toBigInteger(y)); }
if (numerator.startsWith("+")) numerator = numerator.substring(1); return Numbers.divide(Numbers.reduceBigInt(BigInt.fromBigInteger(new BigInteger(numerator))), Numbers.reduceBigInt(BigInt.fromBigInteger(new BigInteger(m.group(2)))));
if (numerator.startsWith("+")) numerator = numerator.substring(1); return Numbers.divide(Numbers.reduceBigInt(BigInt.fromBigInteger(new BigInteger(numerator))), Numbers.reduceBigInt(BigInt.fromBigInteger(new BigInteger(m.group(2)))));
if (numerator.startsWith("+")) numerator = numerator.substring(1); return Numbers.divide(Numbers.reduceBigInt(BigInt.fromBigInteger(new BigInteger(numerator))), Numbers.reduceBigInt(BigInt.fromBigInteger(new BigInteger(m.group(2)))));
static abstract class OpsP implements Ops{ public Number addP(Number x, Number y){ return add(x, y); } public Number multiplyP(Number x, Number y){ return multiply(x, y); } public Number negateP(Number x){ return negate(x); } public Number incP(Number x){ return inc(x); } public Number decP(Number x){ return dec(x); } }