// Statistics.java package net.sf.gogui.util; /** Collects statistical features of sample values. */ public class Statistics { /** Add value. @param value The value to add. */ public void add(double value) { m_min = Math.min(value, m_min); m_max = Math.max(value, m_max); m_sum += value; m_sumSq += (value * value); ++m_count; } /** Get number of values added. @return Number of values added. */ public int getCount() { return m_count; } /** Get standard deviation. @return The standard deviation (square root of variance). */ public double getDeviation() { return Math.sqrt(getVariance()); } /** Get standard error. @return The standard error (standard deviation divided by square root of the number of values). */ public double getError() { if (m_count == 0) return 0; return getDeviation() / Math.sqrt(m_count); } /** Get mean value. @return The mean of all values. */ public double getMean() { if (m_count == 0) return 0; return m_sum / m_count; } /** Get maximum value. @return The maximum of the value or Double.NEGATIVE_INFINITY, if no values. */ public double getMax() { return m_max; } /** Get maximum error. Returns the error assuming that every n values are 100 per cent correlated. @param n The number of values that are assumed to be 100 per cent correlated. @return The standard error for this assumption (standard deviation divided by square root of number of values divided by n). */ public double getMaxError(int n) { if (m_count == 0) return 0; return getDeviation() / Math.sqrt((double)m_count / n); } /** Get minumum value. @return The minumum of the value or Double.POSITIVE_INFINITY, if no values. */ public double getMin() { return m_min; } /** Get sum of values. @return The sum of all values. */ public double getSum() { return m_sum; } /** Get variance. @return The variance (sum of squares of differences between values and mean). */ public double getVariance() { if (m_count == 0) return 0; double mean = getMean(); return m_sumSq / m_count - mean * mean; } private int m_count; private double m_max = Double.NEGATIVE_INFINITY; private double m_min = Double.POSITIVE_INFINITY; private double m_sum; private double m_sumSq; }