// JAVA6only: @Override public int compareTo(Quotient<C> b) { if (b == null || b.isZERO()) { return this.signum(); } C r = num.multiply(b.den); C s = den.multiply(b.num); C x = r.subtract(s); return x.signum(); }
/** * Quotient subtraction. * * @param S Quotient. * @return this-S. */ public Quotient<C> subtract(Quotient<C> S) { if (S == null || S.isZERO()) { return this; } C n = num.multiply(S.den); n = n.subtract(den.multiply(S.num)); C d = den.multiply(S.den); return new Quotient<C>(ring, n, d, false); }
/** * Invariant interval for algebraic number magnitude. * * @param iv root isolating interval for f, with f(left) * f(right) < 0. * @param f univariate polynomial, non-zero. * @param g univariate polynomial, gcd(f,g) == 1. * @param eps length limit for interval length. * @return v with v a new interval contained in iv such that |g(a) - g(b)| < eps for a, b in v * in iv. */ public Interval<C> invariantMagnitudeInterval( Interval<C> iv, GenPolynomial<C> f, GenPolynomial<C> g, C eps) { Interval<C> v = iv; if (g == null || g.isZERO()) { return v; } if (g.isConstant()) { return v; } if (f == null || f.isZERO() || f.isConstant()) { // ? return v; } GenPolynomial<C> gp = PolyUtil.<C>baseDeriviative(g); // System.out.println("g = " + g); // System.out.println("gp = " + gp); C B = magnitudeBound(iv, gp); // System.out.println("B = " + B); RingFactory<C> cfac = f.ring.coFac; C two = cfac.fromInteger(2); while (B.multiply(v.length()).compareTo(eps) >= 0) { C c = v.left.sum(v.right); c = c.divide(two); Interval<C> im = new Interval<C>(c, v.right); if (signChange(im, f)) { v = im; } else { v = new Interval<C>(v.left, c); } // System.out.println("v = " + v.toDecimal()); } return v; }
/** * Quotient multiplication. * * @param S Quotient. * @return this*S. */ public Quotient<C> multiply(Quotient<C> S) { if (S == null || S.isZERO()) { return S; } if (num.isZERO()) { return this; } if (S.isONE()) { return this; } if (this.isONE()) { return S; } C n = num.multiply(S.num); C d = den.multiply(S.den); return new Quotient<C>(ring, n, d, false); }
public C eval(C c) { return c.multiply(x); }