List of usage examples for org.apache.commons.math.exception OutOfRangeException OutOfRangeException
public OutOfRangeException(Number wrong, Number lo, Number hi)
From source file:cz.paulrz.montecarlo.single.Path.java
/** * Adds a new value to the end of path//from ww w. jav a2 s. com * * @param value Value to add * @throws org.apache.commons.math.exception.OutOfRangeException The exception is thrown if path is complete, * i.e. number of points added equals to path's length */ public void addValue(double value) throws OutOfRangeException { if (currentIndex >= length) throw new OutOfRangeException(currentIndex, 0, length); values[currentIndex] = value; currentIndex++; }
From source file:cz.paulrz.montecarlo.random.ParallelPercentile.java
/** * Returns an estimate of the <code>p</code>th percentile of the values * in the <code>values</code> array, starting with the element in (0-based) * position <code>begin</code> in the array and including <code>length</code> * values./*from ww w.j a v a2s .co m*/ * <p> * Calls to this method do not modify the internal <code>quantile</code> * state of this statistic.</p> * <p> * <ul> * <li>Returns <code>Double.NaN</code> if <code>length = 0</code></li> * <li>Returns (for any value of <code>p</code>) <code>values[begin]</code> * if <code>length = 1 </code></li> * <li>Throws <code>IllegalArgumentException</code> if <code>values</code> * is null , <code>begin</code> or <code>length</code> is invalid, or * <code>p</code> is not a valid quantile value (p must be greater than 0 * and less than or equal to 100)</li> * </ul></p> * <p> * See {@link ParallelPercentile} for a description of the percentile estimation * algorithm used.</p> * * @param values array of input values * @param p the percentile to compute * @param begin the first (0-based) element to include in the computation * @param length the number of array elements to include * @return the percentile value * @throws IllegalArgumentException if the parameters are not valid or the * input array is null */ public double evaluate(final double[] values, final int begin, final int length, final double p) throws MathException { test(values, begin, length); if ((p > 100) || (p <= 0)) { throw new OutOfRangeException(p, 0, 100); } if (length == 0) { return Double.NaN; } if (length == 1) { return values[begin]; // always return single value for n = 1 } double n = length; double pos = p * (n + 1) / 100; double fpos = FastMath.floor(pos); int intPos = (int) fpos; double dif = pos - fpos; double[] work; int[] pivotsHeap; if (values == getDataRef()) { work = getDataRef(); pivotsHeap = cachedPivots; } else { work = new double[length]; System.arraycopy(values, begin, work, 0, length); pivotsHeap = new int[(0x1 << MAX_CACHED_LEVELS) - 1]; Arrays.fill(pivotsHeap, -1); } if (pos < 1) { return select(work, pivotsHeap, 0); } if (pos >= n) { return select(work, pivotsHeap, length - 1); } Future<Double> lowerFuture = CpuPool.executorService.submit(new SelectWorker(work, pivotsHeap, intPos - 1)); Future<Double> upperFuture = CpuPool.executorService.submit(new SelectWorker(work, pivotsHeap, intPos)); try { double lower = lowerFuture.get(); double upper = upperFuture.get(); return lower + dif * (upper - lower); } catch (InterruptedException e) { throw new MathException(e); } catch (ExecutionException e) { throw new MathException(e); } }
From source file:cz.paulrz.montecarlo.random.ParallelPercentile.java
/** * Sets the value of the quantile field (determines what percentile is * computed when evaluate() is called with no quantile argument). * * @param p a value between 0 < p <= 100 * @throws IllegalArgumentException if p is not greater than 0 and less * than or equal to 100/*w w w . j a va2 s. c om*/ */ public void setQuantile(final double p) { if (p <= 0 || p > 100) { throw new OutOfRangeException(p, 0, 100); } quantile = p; }