// $Id: moments.java,v 1.1 2004-11-23 08:08:44 bfulgham Exp $ // http://www.bagley.org/~doug/shootout/ import java.io.*; import java.util.*; import java.text.*; import java.lang.Math; public class moments { public static void main(String[] args) { String line; Vector nums = new Vector(); double num, sum = 0.0; double mean = 0.0; double average_deviation = 0.0; double standard_deviation = 0.0; double variance = 0.0; double skew = 0.0; double kurtosis = 0.0; double median = 0.0; double deviation = 0.0; int i, n, mid = 0; try { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); while ((line = in.readLine()) != null) { num = Double.parseDouble(line); sum += num; nums.add(new Double(num)); } } catch (IOException e) { System.err.println(e); return; } n = nums.size(); mean = sum/n; for (i=0; i<n; i++) { deviation = ((Double)nums.get(i)).doubleValue() - mean; average_deviation += Math.abs(deviation); variance += Math.pow(deviation,2); skew += Math.pow(deviation,3); kurtosis += Math.pow(deviation,4); } average_deviation /= n; variance /= (n - 1); standard_deviation = Math.sqrt(variance); if (variance != 0.0) { skew /= (n * variance * standard_deviation); kurtosis = kurtosis/(n * variance * variance) - 3.0; } Collections.sort(nums); mid = (n/2); median = (n % 2 != 0) ? ((Double)nums.get(mid)).doubleValue() : (((Double)nums.get(mid)).doubleValue() + ((Double)nums.get(mid-1)).doubleValue())/2; NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumFractionDigits(13); nf.setGroupingUsed(false); nf.setMaximumFractionDigits(6); nf.setMinimumFractionDigits(6); System.out.println("n: " + n); System.out.println("median: " + nf.format(median)); System.out.println("mean: " + nf.format(mean)); System.out.println("average_deviation: " + nf.format(average_deviation)); System.out.println("standard_deviation: " + nf.format(standard_deviation)); System.out.println("variance: " + nf.format(variance)); System.out.println("skew: " + nf.format(skew)); System.out.println("kurtosis: " + nf.format(kurtosis)); } }