package gve.calc.formula; public class OperatorMinus extends InfixBinaryOp { public String getName() { return "-"; } public int getPri() { return 1800; } public int getLeftPri() { return 1790; } public int getRightPri() { return 1810; } public OperatorMinus(Part l,Part r) { super(l,r); } public Part evaluate(Evaluator ev) { Object l = left.evaluate(ev); Object r = right.evaluate(ev); if (l instanceof Real && r instanceof Real) { return new Real(((Real)l).doubleValue - ((Real)r).doubleValue); } else if (l instanceof Real && r instanceof Interval) { Interval inter = (Interval)r; double left = ((Real)l).doubleValue; return new Interval(left-inter.high,left-inter.low,inter.openHigh,inter.openLow); } else if (l instanceof Interval && r instanceof Real) { Interval inter = (Interval)l; double right = ((Real)r).doubleValue; return new Interval(inter.low-right,inter.high-right,inter.openLow,inter.openHigh); } else if (l instanceof Interval && r instanceof Interval) { Interval left = (Interval)l; Interval right = (Interval)r; return new Interval(left.low-right.high,left.high-right.low, left.openLow||right.openHigh,left.openHigh||right.openLow); } System.out.println("cannot evaluate "+l+" - "+r); return null; } }