/*
 * Copyright (C) 2019, Matthias Sohn <matthias.sohn@sap.com> and others
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Distribution License v. 1.0 which is available at
 * https://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */
package org.eclipse.jgit.util;

Simple double statistics, computed incrementally, variance and standard deviation using Welford's online algorithm, see https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm
Since:5.1.9
/** * Simple double statistics, computed incrementally, variance and standard * deviation using Welford's online algorithm, see * https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm * * @since 5.1.9 */
public class Stats { private int n = 0; private double avg = 0.0; private double min = 0.0; private double max = 0.0; private double sum = 0.0;
Add a value
Params:
  • x – value
/** * Add a value * * @param x * value */
public void add(double x) { n++; min = n == 1 ? x : Math.min(min, x); max = n == 1 ? x : Math.max(max, x); double d = x - avg; avg += d / n; sum += d * d * (n - 1) / n; }
Returns:number of the added values
/** * @return number of the added values */
public int count() { return n; }
Returns:minimum of the added values
/** * @return minimum of the added values */
public double min() { if (n < 1) { return Double.NaN; } return min; }
Returns:maximum of the added values
/** * @return maximum of the added values */
public double max() { if (n < 1) { return Double.NaN; } return max; }
Returns:average of the added values
/** * @return average of the added values */
public double avg() { if (n < 1) { return Double.NaN; } return avg; }
Returns:variance of the added values
/** * @return variance of the added values */
public double var() { if (n < 2) { return Double.NaN; } return sum / (n - 1); }
Returns:standard deviation of the added values
/** * @return standard deviation of the added values */
public double stddev() { return Math.sqrt(this.var()); } }