Just found the following line in some old src code:
int e = (int)fmod(matrix[i], n);
where matrix
is an array of int
, and n
is a size_t
I'm wondering why the use of fmod
rather than %
where we have integer arguments, i.e. why not:
int e = (matrix[i]) % n;
Could there possibly be a performance reason for choosing fmod
over %
or is it just a strange bit of code?
Could there possibly be a performance reason for choosing
fmod
over%
or is it just a strange bit of code?
The fmod
might be a bit faster on architectures with high-latency IDIV
instruction, that takes (say) ~50 cycles or more, so fmod
's function call and int <---> double
conversions cost can be amortized.
According to Agner's Fog instruction tables, IDIV
on AMD K10 architecture takes 24-55 cycles. Comparing with modern Intel Haswell, its latency range is listed as 22-29 cycles, however if there are no dependency chains, the reciprocal throughput is much better on Intel, 8-11 clock cycles.