Weird cast in surf.cpp?
I'm trying to improve surf.cpp performances. From line 140, you can find this function:
inline float calcHaarPattern( const int* origin, const SurfHF* f, int n )
{
double d = 0;
for( int k = 0; k < n; k++ )
d += (origin[f[k].p0] + origin[f[k].p3] - origin[f[k].p1] - origin[f[k].p2])*f[k].w;
return (float)d;
}
Running an Intel Advisor Vectorization analysis, it shows that "1 Data type conversions present" which could be inefficient (especially in vectorization).
But my question is: looking at this function, why the authors would have created d
as double
and then cast it to float
? If they wanted a decimal number, float
would be ok. The only reason that comes to my mind is that since double
is more precise than float
, then it can represents smaller numbers, but the final value is big enough to be stored in a float
, but I didn't run any test on d
value.
Any other possible reason?