From ed153b76bf229e8f7cb6852630629aa41003e14e Mon Sep 17 00:00:00 2001 From: "Robert C. Helling" Date: Fri, 12 Dec 2014 12:05:01 +0100 Subject: [PATCH] Prevent 0/0 in partial pressure calculation If for some reason the diluent is pure oxygen, there is a zero divided by zero error in the partial pressure calculation. This patch prevents it. Fixes #774 Signed-off-by: Robert C. Helling --- dive.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dive.c b/dive.c index b318c4b..d7397f8 100644 --- a/dive.c +++ b/dive.c @@ -1628,8 +1628,12 @@ extern void fill_pressures(struct gas_pressures *pressures, const double amb_pre pressures->n2 = pressures->he = 0.0; } else { pressures->o2 = po2; - pressures->he = (amb_pressure - pressures->o2) * (double)get_he(mix) / (1000 - get_o2(mix)); - pressures->n2 = amb_pressure - pressures->o2 - pressures->he; + if (get_o2(mix) == 1000) { + pressures->he = pressures->n2 = 0; + } else { + pressures->he = (amb_pressure - pressures->o2) * (double)get_he(mix) / (1000 - get_o2(mix)); + pressures->n2 = amb_pressure - pressures->o2 - pressures->he; + } } } 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.. -- 1.9.3 (Apple Git-50)