From df8e3d9e82ed2a4aeb1036201c402e60e42aec60 Mon Sep 17 00:00:00 2001 From: "Robert C. Helling" Date: Thu, 10 Nov 2016 10:15:11 +0100 Subject: [PATCH] Only consider non-zero average depth for statistics Upon importing dives, the average depth can be undefined which we store as 0. This zero should not contribute when computing the average depth for the (yearly) statistics, only dives with average depth set now contribute. Signed-off-by: Robert C. Helling --- core/statistics.c | 13 ++++++++----- core/statistics.h | 2 ++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/core/statistics.c b/core/statistics.c index 1b98654..62a4d73 100644 --- a/core/statistics.c +++ b/core/statistics.c @@ -47,10 +47,10 @@ static void process_temperatures(struct dive *dp, stats_t *stats) static void process_dive(struct dive *dp, stats_t *stats) { - int old_tt, sac_time = 0; + int old_tadt, sac_time = 0; uint32_t duration = dp->duration.seconds; - old_tt = stats->total_time.seconds; + old_tadt = stats->total_average_depth_time.seconds; stats->total_time.seconds += duration; if (duration > stats->longest_time.seconds) stats->longest_time.seconds = duration; @@ -66,9 +66,12 @@ static void process_dive(struct dive *dp, stats_t *stats) /* Maybe we should drop zero-duration dives */ if (!duration) return; - stats->avg_depth.mm = (1.0 * old_tt * stats->avg_depth.mm + - duration * dp->meandepth.mm) / - stats->total_time.seconds; + if (dp->meandepth.mm) { + stats->total_average_depth_time.seconds += duration; + stats->avg_depth.mm = (1.0 * old_tadt * stats->avg_depth.mm + + duration * dp->meandepth.mm) / + stats->total_average_depth_time.seconds; + } if (dp->sac > 100) { /* less than .1 l/min is bogus, even with a pSCR */ sac_time = stats->total_sac_time + duration; stats->avg_sac.mliter = (1.0 * stats->total_sac_time * stats->avg_sac.mliter + diff --git a/core/statistics.h b/core/statistics.h index 015c348..732ae79 100644 --- a/core/statistics.h +++ b/core/statistics.h @@ -16,6 +16,8 @@ typedef struct { int period; duration_t total_time; + /* total time of dives with non-zero average depth */ + duration_t total_average_depth_time; /* avg_time is simply total_time / nr -- let's not keep this */ duration_t shortest_time; duration_t longest_time; -- 2.8.4 (Apple Git-73)