[PATCH v2] Convert volume calculations into floating point

Anton Lundin glance at acc.umu.se
Fri Nov 7 00:04:47 PST 2014


The basic problem was that for gases containing more than 2147483648 ml
of nitrogen the calculations overflowed. This changes the code into
using floating point math for that calculation which will be more
accurate to.

Signed-off-by: Anton Lundin <glance at acc.umu.se>
---
 statistics.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/statistics.c b/statistics.c
index 17667f8..9eb0291 100644
--- a/statistics.c
+++ b/statistics.c
@@ -342,8 +342,8 @@ static void get_gas_parts(struct gasmix mix, volume_t vol, int o2_in_topup, volu
 		return;
 	}
 
-	air.mliter = (vol.mliter * (1000 - get_he(&mix) - get_o2(&mix))) / (1000 - o2_in_topup);
-	he->mliter = (vol.mliter * get_he(&mix)) / 1000;
+	air.mliter = rint(((double)vol.mliter * (1000 - get_he(&mix) - get_o2(&mix))) / (1000 - o2_in_topup));
+	he->mliter = rint(((double)vol.mliter * get_he(&mix)) / 1000.0);
 	o2->mliter += vol.mliter - he->mliter - air.mliter;
 }
 
-- 
1.9.1



More information about the subsurface mailing list