1 /* 2 * Copyright 2003-2004 The Apache Software Foundation. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package org.apache.commons.math.stat.descriptive.rank; 17 18 import org.apache.commons.math.stat.descriptive.AbstractStorelessUnivariateStatistic; 19 20 /** 21 * Returns the maximum of the available values. 22 * <p> 23 * <ul> 24 * <li>The result is <code>NaN</code> iff all values are <code>NaN</code> 25 * (i.e. <code>NaN</code> values have no impact on the value of the statistic).</li> 26 * <li>If any of the values equals <code>Double.POSITIVE_INFINITY</code>, 27 * the result is <code>Double.POSITIVE_INFINITY.</code></li> 28 * </ul> 29 * <p> 30 * <strong>Note that this implementation is not synchronized.</strong> If 31 * multiple threads access an instance of this class concurrently, and at least 32 * one of the threads invokes the <code>increment()</code> or 33 * <code>clear()</code> method, it must be synchronized externally. 34 * 35 * @version $Revision: 348519 $ $Date: 2005-11-23 12:12:18 -0700 (Wed, 23 Nov 2005) $ 36 */ 37 public class Max extends AbstractStorelessUnivariateStatistic { 38 39 /** Serializable version identifier */ 40 private static final long serialVersionUID = -5593383832225844641L; 41 42 /** Number of values that have been added */ 43 private long n; 44 45 /** Current value of the statistic */ 46 private double value; 47 48 /** 49 * Create a Max instance 50 */ 51 public Max() { 52 n = 0; 53 value = Double.NaN; 54 } 55 56 /** 57 * @see org.apache.commons.math.stat.descriptive.StorelessUnivariateStatistic#increment(double) 58 */ 59 public void increment(final double d) { 60 if (d > value || Double.isNaN(value)) { 61 value = d; 62 } 63 n++; 64 } 65 66 /** 67 * @see org.apache.commons.math.stat.descriptive.StorelessUnivariateStatistic#clear() 68 */ 69 public void clear() { 70 value = Double.NaN; 71 n = 0; 72 } 73 74 /** 75 * @see org.apache.commons.math.stat.descriptive.StorelessUnivariateStatistic#getResult() 76 */ 77 public double getResult() { 78 return value; 79 } 80 81 /** 82 * @see org.apache.commons.math.stat.descriptive.StorelessUnivariateStatistic#getN() 83 */ 84 public long getN() { 85 return n; 86 } 87 88 /** 89 * Returns the maximum of the entries in the specified portion of 90 * the input array, or <code>Double.NaN</code> if the designated subarray 91 * is empty. 92 * <p> 93 * Throws <code>IllegalArgumentException</code> if the array is null or 94 * the array index parameters are not valid. 95 * <p> 96 * <ul> 97 * <li>The result is <code>NaN</code> iff all values are <code>NaN</code> 98 * (i.e. <code>NaN</code> values have no impact on the value of the statistic).</li> 99 * <li>If any of the values equals <code>Double.POSITIVE_INFINITY</code>, 100 * the result is <code>Double.POSITIVE_INFINITY.</code></li> 101 * </ul> 102 * 103 * @param values the input array 104 * @param begin index of the first array element to include 105 * @param length the number of elements to include 106 * @return the maximum of the values or Double.NaN if length = 0 107 * @throws IllegalArgumentException if the array is null or the array index 108 * parameters are not valid 109 */ 110 public double evaluate(final double[] values, final int begin, final int length) { 111 double max = Double.NaN; 112 if (test(values, begin, length)) { 113 max = values[begin]; 114 for (int i = begin; i < begin + length; i++) { 115 if (!Double.isNaN(values[i])) { 116 max = (max > values[i]) ? max : values[i]; 117 } 118 } 119 } 120 return max; 121 } 122 }