Does this arise because C's pow/powl/powq functions take floating point inputs and return floating point values ?
I'm a little surprised that the C language doesn't provide a pow() function that takes and returns signed long int (or signed long long int) values - though I guess such a function would easily overflow for relatively low input values.