question about cochran.c
Dirk Hohndel
dirk at hohndel.org
Tue Oct 29 04:34:35 PDT 2019
I'm idly working through the Coverity reports that we are now getting
daily thanks to the wonderful GitHub Action provided by Anton Lundin.
I stumbed about an odd precision error that we've had for ages in
cochran.c - and the more I look at the code, the more I wonder if this
isn't a very different bug, actually.
https://scan4.coverity.com/reports.htm#v33454/p13160/g33454g/fileInstanceId=68978672&defectInstanceId=11836151&mergedDefectId=45175
(I don't know if these links actually work for people without a Coverity
account...)
Here's the code in question:
dc->watertemp.mkelvin = C_to_mkelvin((log[CMD_MIN_TEMP] / 32) - 1.8);
Coverity rightfully points out that it would be better to do this as a
floating point division. But looking at the formula I went... Hu???
A quick grep shows me that this is the odd one out:
$ grep 1\\.8 core/cochran.c
sample->temperature.mkelvin = C_to_mkelvin((temp - 32) / 1.8);
dc->watertemp.mkelvin = C_to_mkelvin((log[CMD_MIN_TEMP] / 32.0) - 1.8);
dc->watertemp.mkelvin = C_to_mkelvin((log[EMC_MIN_TEMP] - 32) / 1.8);
dc->watertemp.mkelvin = C_to_mkelvin((min_temp - 32) / 1.8);
Yeah, that seems to make more sense. And ideally, all of them should do
the division in floating point (dividing by 32.0).
John, I don't have any hardware to test this. Instead of me trying to hack
this blind, would you like to send a pull request to fix the (I think,
obvious) bug and maybe clean up the math and make it consistent?
Thanks
/D
More information about the subsurface
mailing list