From bbef887b792286939902be9ce102ec9b44e5ca55 Mon Sep 17 00:00:00 2001 From: "Robert C. Helling" Date: Mon, 19 Jan 2015 20:26:14 +0100 Subject: Don't divide 0/0 when using a PSCR with 100% oxygen Reported-by: Anton "glance" Lundin Signed-off-by: Robert C. Helling Signed-off-by: Dirk Hohndel --- dive.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dive.c b/dive.c index a5dc15240..4d4cc3e1d 100644 --- a/dive.c +++ b/dive.c @@ -1683,8 +1683,12 @@ extern void fill_pressures(struct gas_pressures *pressures, const double amb_pre } else { if (divemode == PSCR) { /* The steady state approximation should be good enough */ pressures->o2 = get_o2(mix) / 1000.0 * amb_pressure - (1.0 - get_o2(mix) / 1000.0) * prefs.o2consumption / (prefs.bottomsac * prefs.pscr_ratio / 1000.0); - pressures->he = (amb_pressure - pressures->o2) * get_he(mix) / (1000.0 - get_o2(mix)); - pressures->n2 = (amb_pressure - pressures->o2) * (1000 - get_o2(mix) - get_he(mix)) / (1000.0 - get_o2(mix)); + if (get_o2(mix) != 1000) { + pressures->he = (amb_pressure - pressures->o2) * get_he(mix) / (1000.0 - get_o2(mix)); + pressures->n2 = (amb_pressure - pressures->o2) * (1000 - get_o2(mix) - get_he(mix)) / (1000.0 - get_o2(mix)); + } else { + pressures->he = pressures->n2 = 0; + } } else { // Open circuit dives: no gas pressure values available, they need to be calculated pressures->o2 = get_o2(mix) / 1000.0 * amb_pressure; // These calculations are also used if the CCR calculation above.. -- cgit v1.2.3-70-g09d2