aboutsummaryrefslogtreecommitdiffstats
path: root/core/statistics.c
diff options
context:
space:
mode:
authorGravatar Jeremie Guichard <djebrest@gmail.com>2017-03-09 23:07:30 +0700
committerGravatar Jeremie Guichard <djebrest@gmail.com>2017-03-09 23:07:30 +0700
commit2b06a0b2234cf2779f80e87038011067be282bcb (patch)
tree7532b11736a5eaedb3ceddf3e85ee423948d47ce /core/statistics.c
parent406e4287eb96e10ddfd22163f0e863e353470c68 (diff)
downloadsubsurface-2b06a0b2234cf2779f80e87038011067be282bcb.tar.gz
Fix potential double/float to int rounding errors
Not using lrint(f) when converting double/float to int creates rounding errors. This error was detected by TestParse::testParseDM4 failure on Windows. It was creating rounding inconsistencies on Linux too, see change in TestDiveDM4.xml. Enable -Wfloat-conversion for gcc version greater than 4.9.0 Signed-off-by: Jeremie Guichard <djebrest@gmail.com>
Diffstat (limited to 'core/statistics.c')
-rw-r--r--core/statistics.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/core/statistics.c b/core/statistics.c
index b615cdef1..5f0d977e7 100644
--- a/core/statistics.c
+++ b/core/statistics.c
@@ -68,15 +68,15 @@ static void process_dive(struct dive *dp, stats_t *stats)
return;
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;
+ stats->avg_depth.mm = lrint((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 +
+ stats->avg_sac.mliter = lrint((1.0 * stats->total_sac_time * stats->avg_sac.mliter +
duration * dp->sac) /
- sac_time;
+ sac_time);
if (dp->sac > stats->max_sac.mliter)
stats->max_sac.mliter = dp->sac;
if (stats->min_sac.mliter == 0 || dp->sac < stats->min_sac.mliter)