I am using the pow
function in C and storing the return value in an integer type. see the code snippet below:
for (i = 0; i < 5; i++){
val = (int)pow(5, i);
printf("%d, ", val);
}
here i
, and val
are integers and the output is 1, 5, 24, 124, 624
.
I believe this is because a float 25 is treated as 24.99999... which gets rounded down to 24 on assignment to an integer.
How can I by pass this if I still need to store the return value in an int ?
Implement pow yourself.
This, of course, only handles positive exponents, and only works on ints, and there are certainly more efficient ways to do it. See, for example, the source for
^
in Haskell.I had this problem my self. I solved it easily in your instruction simply just add if statement.
Add
0.5
before casting toint
. If your system supports it, you can call the C99round()
function, but I prefer to avoid it for portability reasons.replace
with