This question already has an answer here:
- Strange behaviour of the pow function 5 answers
I was simply writing a program to calculate the power of an integer. But the output was not as expected. It worked for all the integer numbers except for the power of 5.
My code is:
#include <stdio.h>
#include <math.h>
int main(void)
{
int a,b;
printf("Enter the number.");
scanf("\n%d",&a);
b=pow(a,2);
printf("\n%d",b);
}
The output is something like this:
"Enter the number. 2
4
"Enter the number. 5
24
"Enter the number. 4
16
"Enter the number. 10
99
Can't we use pow()
function for int data type??
there is no int based pow. What you are suffering from is floating point truncation.
an int based pow is too constrained (the range of inputs would quickly overflow an int). In many cases int based pow, like in your case where its powers of 2 can be done efficiently other ways.
The C library function double pow(double x, double y)
It takes double type
Floating point precision is doing its job here. The actual working of
pow
is usinglog
Look at
math.h
library which says:<math.h>
Just add
0.5
to the return value ofpow
and then convert it toint
.So, the answer to your question
Not always. For integer exponentiation you could implement your own function (this will work for +ve integers only):
printf("%a", pow(10, 2))
and see what you get; I expect you'll see you don't quite get 100. Calllround
if you want to round instead of truncating.