From 9238a7f0dfccfe97bc0bf0bba983fadf70035c48 Mon Sep 17 00:00:00 2001 From: Rick Walsh Date: Sun, 30 Aug 2015 21:35:09 +1000 Subject: Profile.c: Fix stepping through loop between sample points If adjacent samples at times t0 and t1 are greater than time_stepsize apart, this for loop steps through the time between samples to calculate tissue tolerance incrementally at each intermediate time, j, (and interpolated depth). If the difference between t1 and t0 is not a multiple of time_stepsize, immediately before the final increment time_stepsize needs to be reduced to t1 - j so that j = t1 in the final increment. This is necessary when: t1 - j < time_stepsize (i.e. we are about to start the final increment, and time_stepsize needs to be reduced), and j < t1 (i.e. we didn't just do the final increment - without this condition time_stepsize would be set to zero, leading to an infinite loop) Previously, the check was (j - t0 < time_stepsize), which always returns false. Signed-off-by: Rick Walsh Signed-off-by: Dirk Hohndel --- profile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/profile.c b/profile.c index 0722151a3..79effeb39 100644 --- a/profile.c +++ b/profile.c @@ -857,8 +857,8 @@ void calculate_deco_information(struct dive *dive, struct divecomputer *dc, stru double min_pressure = add_segment(depth_to_mbar(depth, dive) / 1000.0, &dive->cylinder[entry->cylinderindex].gasmix, time_stepsize, entry->o2pressure.mbar, dive, entry->sac); tissue_tolerance = min_pressure; - if (j - t0 < time_stepsize) - time_stepsize = j - t0; + if ((t1 - j < time_stepsize) && (j < t1)) + time_stepsize = t1 - j; } if (t0 == t1) entry->ceiling = (entry - 1)->ceiling; -- cgit v1.2.3-70-g09d2