diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/statistics.c | 13 | ||||
-rw-r--r-- | core/statistics.h | 2 |
2 files changed, 10 insertions, 5 deletions
diff --git a/core/statistics.c b/core/statistics.c index 1b9865443..62a4d737f 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 015c3481e..732ae79cd 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; |