diff --git a/dive.c b/dive.c index 455b1288c..edcb130f4 100644 --- a/dive.c +++ b/dive.c @@ -549,7 +549,7 @@ static void sanitize_cylinder_type(cylinder_type_t *type) volume_of_air = cuft_to_l(type->size.mliter); /* milliliters at 1 atm: "true size" */ volume = volume_of_air / surface_volume_multiplier(type->workingpressure); - type->size.mliter = volume + 0.5; + type->size.mliter = rint(volume); } /* Ok, we have both size and pressure: try to match a description */ diff --git a/dive.h b/dive.h index 658b199fe..16105e1ec 100644 --- a/dive.h +++ b/dive.h @@ -155,7 +155,7 @@ static inline double grams_to_lbs(int grams) static inline int lbs_to_grams(double lbs) { - return lbs * 453.6 + 0.5; + return rint(lbs * 453.6); } static inline double ml_to_cuft(int ml) @@ -175,12 +175,12 @@ static inline double mm_to_feet(int mm) static inline unsigned long feet_to_mm(double feet) { - return feet * 304.8 + 0.5; + return rint(feet * 304.8); } static inline int to_feet(depth_t depth) { - return mm_to_feet(depth.mm) + 0.5; + return rint(mm_to_feet(depth.mm)); } static inline double mkelvin_to_C(int mkelvin) @@ -195,12 +195,12 @@ static inline double mkelvin_to_F(int mkelvin) static inline unsigned long F_to_mkelvin(double f) { - return (f-32) * 1000 / 1.8 + ZERO_C_IN_MKELVIN + 0.5; + return rint((f-32) * 1000 / 1.8 + ZERO_C_IN_MKELVIN); } static inline unsigned long C_to_mkelvin(double c) { - return c * 1000 + ZERO_C_IN_MKELVIN + 0.5; + return rint(c * 1000 + ZERO_C_IN_MKELVIN); } static inline double psi_to_bar(double psi) @@ -210,12 +210,12 @@ static inline double psi_to_bar(double psi) static inline long psi_to_mbar(double psi) { - return psi_to_bar(psi)*1000 + 0.5; + return rint(psi_to_bar(psi)*1000); } static inline int to_PSI(pressure_t pressure) { - return pressure.mbar * 0.0145037738 + 0.5; + return rint(pressure.mbar * 0.0145037738); } static inline double bar_to_atm(double bar) @@ -446,7 +446,7 @@ static inline int calculate_depth_to_mbar(int depth, pressure_t surface_pressure if (!salinity) salinity = SEAWATER_SALINITY; specific_weight = salinity / 10000.0 * 0.981; - mbar += depth / 10.0 * specific_weight + 0.5; + mbar += rint(depth / 10.0 * specific_weight); return mbar; } @@ -471,7 +471,7 @@ static inline int rel_mbar_to_depth(int mbar, struct dive *dive) if (dive->dc.salinity) specific_weight = dive->dc.salinity / 10000.0 * 0.981; /* whole mbar gives us cm precision */ - cm = mbar / specific_weight + 0.5; + cm = rint(mbar / specific_weight); return cm * 10; } diff --git a/divelist.c b/divelist.c index a9a2b451c..9dc4b9438 100644 --- a/divelist.c +++ b/divelist.c @@ -226,7 +226,7 @@ static int calculate_otu(struct dive *dive) if (po2 >= 500) otu += pow((po2 - 500) / 1000.0, 0.83) * t / 30.0; } - return otu + 0.5; + return rint(otu); } /* calculate CNS for a dive - this only takes the first divecomputer into account */ int const cns_table[][3] = { diff --git a/libdivecomputer.c b/libdivecomputer.c index f93b2c0fc..7cc3894f9 100644 --- a/libdivecomputer.c +++ b/libdivecomputer.c @@ -77,13 +77,13 @@ static bool get_tanksize(device_data_t *devdata, const unsigned char *data, cyli case COBALT_CFATPSI: airvolume = cuft_to_l(atomics_gas_info[idx].tanksize) * 1000.0; mbar = psi_to_mbar(atomics_gas_info[idx].workingpressure); - cyl[idx].type.size.mliter = airvolume / bar_to_atm(mbar / 1000.0) + 0.5; + cyl[idx].type.size.mliter = rint(airvolume / bar_to_atm(mbar / 1000.0)); cyl[idx].type.workingpressure.mbar = mbar; break; case COBALT_CFATBAR: airvolume = cuft_to_l(atomics_gas_info[idx].tanksize) * 1000.0; mbar = atomics_gas_info[idx].workingpressure * 1000; - cyl[idx].type.size.mliter = airvolume / bar_to_atm(mbar / 1000.0) + 0.5; + cyl[idx].type.size.mliter = rint(airvolume / bar_to_atm(mbar / 1000.0)); cyl[idx].type.workingpressure.mbar = mbar; break; case COBALT_WETINDL: @@ -112,8 +112,8 @@ static int parse_gasmixes(device_data_t *devdata, struct dive *dive, dc_parser_t if (i >= MAX_CYLINDERS) continue; - o2 = gasmix.oxygen * 1000 + 0.5; - he = gasmix.helium * 1000 + 0.5; + o2 = rint(gasmix.oxygen * 1000); + he = rint(gasmix.helium * 1000); /* Ignore bogus data - libdivecomputer does some crazy stuff */ if (o2 + he <= O2_IN_AIR || o2 >= 1000) @@ -204,11 +204,11 @@ sample_cb(dc_sample_type_t type, dc_sample_value_t value, void *userdata) finish_sample(dc); break; case DC_SAMPLE_DEPTH: - sample->depth.mm = value.depth * 1000 + 0.5; + sample->depth.mm = rint(value.depth * 1000); break; case DC_SAMPLE_PRESSURE: sample->sensor = value.pressure.tank; - sample->cylinderpressure.mbar = value.pressure.value * 1000 + 0.5; + sample->cylinderpressure.mbar = rint(value.pressure.value * 1000); break; case DC_SAMPLE_TEMPERATURE: sample->temperature.mkelvin = C_to_mkelvin(value.temperature); @@ -235,28 +235,28 @@ sample_cb(dc_sample_type_t type, dc_sample_value_t value, void *userdata) #if DC_VERSION_CHECK(0, 3, 0) case DC_SAMPLE_SETPOINT: /* for us a setpoint means constant pO2 from here */ - sample->po2 = po2 = value.setpoint * 1000 + 0.5; + sample->po2 = po2 = rint(value.setpoint * 1000); break; case DC_SAMPLE_PPO2: - sample->po2 = po2 = value.ppo2 * 1000 + 0.5; + sample->po2 = po2 = rint(value.ppo2 * 1000); break; case DC_SAMPLE_CNS: - sample->cns = cns = value.cns * 100 + 0.5; + sample->cns = cns = rint(value.cns * 100); break; case DC_SAMPLE_DECO: if (value.deco.type == DC_DECO_NDL) { sample->ndl.seconds = ndl = value.deco.time; - sample->stopdepth.mm = stopdepth = value.deco.depth * 1000.0 + 0.5; + sample->stopdepth.mm = stopdepth = rint(value.deco.depth * 1000.0); sample->in_deco = in_deco = false; } else if (value.deco.type == DC_DECO_DECOSTOP || value.deco.type == DC_DECO_DEEPSTOP) { sample->in_deco = in_deco = true; - sample->stopdepth.mm = stopdepth = value.deco.depth * 1000.0 + 0.5; + sample->stopdepth.mm = stopdepth = rint(value.deco.depth * 1000.0); sample->stoptime.seconds = stoptime = value.deco.time; ndl = 0; } else if (value.deco.type == DC_DECO_SAFETYSTOP) { sample->in_deco = in_deco = false; - sample->stopdepth.mm = stopdepth = value.deco.depth * 1000.0 + 0.5; + sample->stopdepth.mm = stopdepth = rint(value.deco.depth * 1000.0); sample->stoptime.seconds = stoptime = value.deco.time; } #endif @@ -451,7 +451,7 @@ static int dive_cb(const unsigned char *data, unsigned int size, dc_parser_destroy(parser); return false; } - dive->dc.maxdepth.mm = maxdepth * 1000 + 0.5; + dive->dc.maxdepth.mm = rint(maxdepth * 1000); // Parse the gas mixes. unsigned int ngases = 0; @@ -474,7 +474,7 @@ static int dive_cb(const unsigned char *data, unsigned int size, dc_parser_destroy(parser); return false; } - dive->dc.salinity = salinity.density * 10.0 + 0.5; + dive->dc.salinity = rint(salinity.density * 10.0); double surface_pressure = 0; rc = dc_parser_get_field(parser, DC_FIELD_ATMOSPHERIC, 0, &surface_pressure); @@ -483,7 +483,7 @@ static int dive_cb(const unsigned char *data, unsigned int size, dc_parser_destroy(parser); return false; } - dive->dc.surface_pressure.mbar = surface_pressure * 1000.0 + 0.5; + dive->dc.surface_pressure.mbar = rint(surface_pressure * 1000.0); #endif rc = parse_gasmixes(devdata, dive, parser, ngases, data); diff --git a/parse-xml.c b/parse-xml.c index 3c536ed4b..2a98d3904 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -326,7 +326,7 @@ static void pressure(char *buffer, void *_press) break; } if (mbar > 5 && mbar < 500000) { - pressure->mbar = mbar + 0.5; + pressure->mbar = rint(mbar); break; } /* fallthrough */ @@ -341,7 +341,7 @@ static void salinity(char *buffer, void *_salinity) union int_or_float val; switch (integer_or_float(buffer, &val)) { case FLOAT: - *salinity = val.fp * 10.0 + 0.5; + *salinity = rint(val.fp * 10.0); break; default: printf("Strange salinity reading %s\n", buffer); @@ -357,7 +357,7 @@ static void depth(char *buffer, void *_depth) case FLOAT: switch (xml_parsing_units.length) { case METERS: - depth->mm = val.fp * 1000 + 0.5; + depth->mm = rint(val.fp * 1000); break; case FEET: depth->mm = feet_to_mm(val.fp); @@ -378,7 +378,7 @@ static void weight(char *buffer, void *_weight) case FLOAT: switch (xml_parsing_units.weight) { case KG: - weight->grams = val.fp * 1000 + 0.5; + weight->grams = rint(val.fp * 1000); break; case LBS: weight->grams = lbs_to_grams(val.fp); @@ -472,7 +472,7 @@ static void percent(char *buffer, void *_fraction) /* Then turn percent into our integer permille format */ if (val >= 0 && val <= 100.0) { - fraction->permille = val * 10 + 0.5; + fraction->permille = rint(val * 10); break; } default: @@ -502,7 +502,7 @@ static void cylindersize(char *buffer, void *_volume) switch (integer_or_float(buffer, &val)) { case FLOAT: - volume->mliter = val.fp * 1000 + 0.5; + volume->mliter = rint(val.fp * 1000); break; default: @@ -549,7 +549,7 @@ static void get_rating(char *buffer, void *_i) static void double_to_permil(char *buffer, void *_i) { int *i = _i; - *i = ascii_strtod(buffer, NULL) * 1000.0 + 0.5; + *i = rint(ascii_strtod(buffer, NULL) * 1000.0); } static void hex_value(char *buffer, void *_i) @@ -636,7 +636,7 @@ static void psi_or_bar(char *buffer, void *_pressure) if (val.fp > 400) pressure->mbar = psi_to_mbar(val.fp); else - pressure->mbar = val.fp * 1000 + 0.5; + pressure->mbar = rint(val.fp * 1000); break; default: fprintf(stderr, "Crazy Diving Log PSI reading %s\n", buffer); diff --git a/profile.c b/profile.c index 07328580f..bcf4fb183 100644 --- a/profile.c +++ b/profile.c @@ -627,7 +627,7 @@ static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi, magic = (interpolate.end - interpolate.start) / (double) interpolate.pressure_time; /* Use that overall pressure change to update the current pressure */ - cur_pr[cyl] = interpolate.start + magic * interpolate.acc_pressure_time + 0.5; + cur_pr[cyl] = rint(interpolate.start + magic * interpolate.acc_pressure_time); } INTERPOLATED_PRESSURE(entry) = cur_pr[cyl]; } diff --git a/uemis-downloader.c b/uemis-downloader.c index ceac29235..99a1a8bc8 100644 --- a/uemis-downloader.c +++ b/uemis-downloader.c @@ -65,7 +65,7 @@ static void uemis_ts(char *buffer, void *_when) /* float minutes */ static void uemis_duration(char *buffer, duration_t *duration) { - duration->seconds = ascii_strtod(buffer, NULL) * 60 + 0.5; + duration->seconds = rint(ascii_strtod(buffer, NULL) * 60); } /* int cm */ diff --git a/uemis.c b/uemis.c index 27e526f1d..c43606d9c 100644 --- a/uemis.c +++ b/uemis.c @@ -329,9 +329,9 @@ void uemis_parse_divelog_binary(char *base64, void *datap) { * we store the incorrect working pressure to get the SAC calculations "close" * but the user will have to correct this manually */ - dive->cylinder[i].type.size.mliter = volume; + dive->cylinder[i].type.size.mliter = rint(volume); dive->cylinder[i].type.workingpressure.mbar = 202600; - dive->cylinder[i].gasmix.o2.permille = *(uint8_t *)(data+120+25*(gasoffset + i)) * 10 + 0.5; + dive->cylinder[i].gasmix.o2.permille = *(uint8_t *)(data+120+25*(gasoffset + i)) * 10; dive->cylinder[i].gasmix.he.permille = 0; } /* first byte of divelog data is at offset 0x123 */