@Override public synchronized void addDatum(double datum, double weight) { super.addDatum(datum, weight); totalSquaredWeight += weight * weight; double weightedData = datum * weight; totalWeightedData += weightedData; totalWeightedSquaredData += weightedData * datum; }
@Override public synchronized void changeDatum(double delta) { changeDatum(delta, 1.0); }
@Override public synchronized void removeDatum(double datum) { removeDatum(datum, 1.0); }
@Test public void testWeighted() { WeightedRunningAverage runningAverage = new WeightedRunningAverage(); assertEquals(0, runningAverage.getCount()); assertTrue(Double.isNaN(runningAverage.getAverage())); runningAverage.addDatum(1.0, 2.0); assertEquals(1.0, runningAverage.getAverage(), EPSILON); runningAverage.addDatum(1.0); assertEquals(1.0, runningAverage.getAverage(), EPSILON); runningAverage.addDatum(8.0, 0.5); assertEquals(2.0, runningAverage.getAverage(), EPSILON); runningAverage.addDatum(-4.0); assertEquals(2.0/3.0, runningAverage.getAverage(), EPSILON); runningAverage.removeDatum(-4.0); assertEquals(2.0, runningAverage.getAverage(), EPSILON); runningAverage.removeDatum(2.0, 2.0); assertEquals(2.0, runningAverage.getAverage(), EPSILON); runningAverage.changeDatum(0.0); assertEquals(2.0, runningAverage.getAverage(), EPSILON); runningAverage.changeDatum(4.0, 0.5); assertEquals(5.0/1.5, runningAverage.getAverage(), EPSILON); }
@Override public synchronized void removeDatum(double datum) { removeDatum(datum, 1.0); }
@Override public synchronized void addDatum(double datum, double weight) { super.addDatum(datum, weight); totalSquaredWeight += weight * weight; double weightedData = datum * weight; totalWeightedData += weightedData; totalWeightedSquaredData += weightedData * datum; }
@Override public synchronized void changeDatum(double delta) { changeDatum(delta, 1.0); }
@Override public synchronized void removeDatum(double datum) { removeDatum(datum, 1.0); }
@Override public synchronized void addDatum(double datum, double weight) { super.addDatum(datum, weight); totalSquaredWeight += weight * weight; double weightedData = datum * weight; totalWeightedData += weightedData; totalWeightedSquaredData += weightedData * datum; }
@Override public synchronized void changeDatum(double delta) { changeDatum(delta, 1.0); }
@Override public synchronized void removeDatum(double datum, double weight) { super.removeDatum(datum, weight); totalSquaredWeight -= weight * weight; if (totalSquaredWeight <= 0.0) { totalSquaredWeight = 0.0; } double weightedData = datum * weight; totalWeightedData -= weightedData; if (totalWeightedData <= 0.0) { totalWeightedData = 0.0; } totalWeightedSquaredData -= weightedData * datum; if (totalWeightedSquaredData <= 0.0) { totalWeightedSquaredData = 0.0; } }
@Override public synchronized void addDatum(double datum) { addDatum(datum, 1.0); }
@Override public synchronized void removeDatum(double datum, double weight) { super.removeDatum(datum, weight); totalSquaredWeight -= weight * weight; if (totalSquaredWeight <= 0.0) { totalSquaredWeight = 0.0; } double weightedData = datum * weight; totalWeightedData -= weightedData; if (totalWeightedData <= 0.0) { totalWeightedData = 0.0; } totalWeightedSquaredData -= weightedData * datum; if (totalWeightedSquaredData <= 0.0) { totalWeightedSquaredData = 0.0; } }
@Override public synchronized void addDatum(double datum) { addDatum(datum, 1.0); }
@Override public synchronized void removeDatum(double datum, double weight) { super.removeDatum(datum, weight); totalSquaredWeight -= weight * weight; if (totalSquaredWeight <= 0.0) { totalSquaredWeight = 0.0; } double weightedData = datum * weight; totalWeightedData -= weightedData; if (totalWeightedData <= 0.0) { totalWeightedData = 0.0; } totalWeightedSquaredData -= weightedData * datum; if (totalWeightedSquaredData <= 0.0) { totalWeightedSquaredData = 0.0; } }
@Override public synchronized void addDatum(double datum) { addDatum(datum, 1.0); }