public ValueEval evaluate( final ValueEval[] args, final int srcRowIndex, final int srcColumnIndex) { if (args.length == 0 || args.length > 2) { // Wrong number of arguments return ErrorEval.VALUE_INVALID; } try { double[] values = AggregateFunction.ValueCollector.collectValues(args[0]); double guess; if (args.length == 2) { guess = NumericFunction.singleOperandEvaluate(args[1], srcRowIndex, srcColumnIndex); } else { guess = 0.1d; } double result = irr(values, guess); NumericFunction.checkValue(result); return new NumberEval(result); } catch (EvaluationException e) { return e.getErrorEval(); } }