package gve.calc.formula;
public class AnalysisFunctions implements Function {
public AnalysisFunctions() {}
public Part call(String funcname,Part args,Evaluator eval) {
if (funcname.equals("abs"))
return computeAbs(eval,args.evaluate(eval));
return null;
}
public static Part computeAbs(Evaluator ev,Object a) {
if (a instanceof Real) {
return new Real(Math.abs( ((Real)a).doubleValue ));
} else if (a instanceof Interval) {
Interval intv = (Interval)a;
if (intv.low >= 0) return new Interval(intv.low,intv.high,intv.openLow,intv.openHigh);
if (intv.high >= 0) { // low < 0 < high
if (intv.high > -intv.low) return new Interval(0,intv.high,false,intv.openHigh);
else return new Interval(0,-intv.low,false,intv.openLow);
}
// else low < high < 0
return new Interval(-intv.high,-intv.low,intv.openHigh,intv.openLow);
} else return null;
}
}