question about cochran.c

Dirk Hohndel dirk at
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.

(I don't know if these links actually work for people without a Coverity

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?



More information about the subsurface mailing list