/* ArrayStats.java

Methods for generating statistics from arrays of doubles

BPG 22-1-98
*/

import java.lang.Math;


public final class ArrayStats extends Object {

  // Mean of array (int)
  public static double mean(int[] a, int n) {
    // data in array "a"
    // length of array in "n"

    double sum=0;
    int i;

    for (i = 0; i < n; i++)
      sum = sum + (double)a[i];
    return(sum/(double)n);

  }

  // Mean of array (float)
  public static double mean(float[] a, int n) {
    // data in array "a"
    // length of array in "n"

    double sum=0;
    int i;

    for (i = 0; i < n; i++)
      sum = sum + (double)a[i];
    return(sum/(double)n);

  }

  // Mean of array (double)
  public static double mean(double[] a, int n) {
    // data in array "a"
    // length of array in "n"

    double sum=0;
    int i;

    for (i = 0; i < n; i++)
      sum = sum + a[i];
    return(sum/(double)n);

  }


  // Variance of array (unbiased estimate)
  public static double var(int[] a, int n) {
    double sum=0, mn;
    int i;

    if (n < 2)
      return 0;
    mn = mean(a, n);
    for (i = 0; i < n; i++)
      sum = sum + (((double)a[i]-mn)*((double)a[i]-mn));
    return(sum/(double)(n-1));

  }

  // Variance of array (unbiased estimate)
  public static double var(float[] a, int n) {
    double sum=0, mn;
    int i;

    if (n < 2)
      return 0;
    mn = mean(a, n);
    for (i = 0; i < n; i++)
      sum = sum + (((double)a[i]-mn)*((double)a[i]-mn));
    return(sum/(double)(n-1));

  }

  // Variance of array (unbiased estimate)
  public static double var(double[] a, int n) {
    double sum=0, mn;
    int i;

    if (n < 2)
      return 0;
    mn = mean(a, n);
    for (i = 0; i < n; i++)
      sum = sum + ((a[i]-mn)*(a[i]-mn));
    return(sum/(double)(n-1));

  }


  // Standard deviation of array
  public static double std(int[] a, int n) {
    return(Math.sqrt(var(a, n)));
  }

  // Standard deviation of array
  public static double std(float[] a, int n) {
    return(Math.sqrt(var(a, n)));
  }

  // Standard deviation of array
  public static double std(double[] a, int n) {
    return(Math.sqrt(var(a, n)));
  }

}