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 <rickmwalsh@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Rick Walsh 2015-08-30 21:35:09 +10:00 committed by Dirk Hohndel
parent 6d7faa106f
commit 9238a7f0df

View file

@ -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;