@Override public int compareTo(IExpr expr) { if (expr instanceof IRational) { if (expr instanceof FractionSym) { FractionSym temp = (FractionSym) expr; if (temp.fDenominator == fDenominator) { return fNumerator < temp.fNumerator ? -1 : fNumerator == temp.fNumerator ? 0 : 1; } long valt = (long) fNumerator * (long) temp.fDenominator; long valo = (long) fDenominator * (long) temp.fNumerator; return valt < valo ? -1 : valt == valo ? 0 : 1; } if (expr instanceof AbstractIntegerSym) { return compareTo(new BigFractionSym(((AbstractIntegerSym) expr).toBigNumerator(), BigInteger.ONE)); } if (expr instanceof BigFractionSym) { return -expr.compareTo(this); } } if (expr.isReal()) { return Double.compare(doubleValue(), ((ISignedNumber) expr).doubleValue()); } return -1; // return super.compareTo(expr); }