From 9f3f29d4f28fb9a42809907babe3283b53ce52da Mon Sep 17 00:00:00 2001 From: Reiner Jung <reiner.jung@email.uni-kiel.de> Date: Wed, 14 Sep 2022 21:41:29 +0200 Subject: [PATCH] Made table calculations stable against nan and infinite values. --- .../results/stages/ComputeTableStage.java | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/tools/compile-results/src/main/java/moobench/tools/results/stages/ComputeTableStage.java b/tools/compile-results/src/main/java/moobench/tools/results/stages/ComputeTableStage.java index cb49ae8..6800b73 100644 --- a/tools/compile-results/src/main/java/moobench/tools/results/stages/ComputeTableStage.java +++ b/tools/compile-results/src/main/java/moobench/tools/results/stages/ComputeTableStage.java @@ -63,14 +63,25 @@ public class ComputeTableStage extends AbstractTransformation<ExperimentLog, Tab } private Measurements computePrevious(final Measurements previousMeasurements, final Measurements measurements) { - return new Measurements((measurements.getMean() + previousMeasurements.getMean())/2, - (measurements.getStandardDeviation() + previousMeasurements.getStandardDeviation())/2, - (measurements.getConvidence() + previousMeasurements.getConvidence())/2, - (measurements.getLowerQuartile() + previousMeasurements.getLowerQuartile())/2, - (measurements.getMedian() + previousMeasurements.getMedian())/2, - (measurements.getUpperQuartile() + previousMeasurements.getUpperQuartile())/2, - (measurements.getMin() + previousMeasurements.getMin())/2, - (measurements.getMax() + previousMeasurements.getMax())/2); + return new Measurements( + this.computeValue(measurements.getMean(), previousMeasurements.getMean()), + this.computeValue(measurements.getStandardDeviation(), previousMeasurements.getStandardDeviation()), + this.computeValue(measurements.getConvidence(), previousMeasurements.getConvidence()), + this.computeValue(measurements.getLowerQuartile(), previousMeasurements.getLowerQuartile()), + this.computeValue(measurements.getMedian(), previousMeasurements.getMedian()), + this.computeValue(measurements.getUpperQuartile(), previousMeasurements.getUpperQuartile()), + this.computeValue(measurements.getMin(), previousMeasurements.getMin()), + this.computeValue(measurements.getMax(), previousMeasurements.getMax())); + } + + private Double computeValue(final Double newValue, final Double previousValue) { + if (newValue.isNaN() || newValue.isInfinite()) { + return previousValue; + } else if (previousValue.isNaN() || previousValue.isInfinite()) { + return newValue; + } else { + return (newValue + previousValue)/2; + } } } -- GitLab