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