Does pow() work for int data type in C? -


this question has answer here:

i writing program calculate power of integer. output not expected. worked integer numbers except power of 5.

my code is:

#include <stdio.h> #include <math.h>  int main(void) {   int a,b;   printf("enter number.");   scanf("\n%d",&a);   b=pow(a,2);   printf("\n%d",b); } 

the output this:

"enter number. 2  4 "enter number. 5  24 "enter number. 4  16 "enter number. 10  99 

can't use pow() function int data type??

floating point precision doing job here. actual working of pow using log

pow(a, 2) ==> exp(log(a) * 2) 

look @ math.h library says:

<math.h>

/* excess precision when using 64-bit mantissa fpu math ops can cause unexpected results of msvcrt math functions. example, unless function return value stored (truncating 53-bit mantissa), calls pow both x , y integral values produce non-integral result. ... */

just add 0.5 return value of pow , convert int.

b = (int)(pow(a,2) + 0.5);   

so, answer question

does pow() work int data type in c?

not always. integer exponentiation implement own function (this work +ve integers only):

int int_pow(int base, int exp) {     int result = 1;     while (exp)     {         if (exp & 1)            result *= base;         exp /= 2;         base *= base;     }     return result; } 

Comments

Popular posts from this blog

facebook - android ACTION_SEND to share with specific application only -

python - Creating a new virtualenv gives a permissions error -

javascript - cocos2d-js draw circle not instantly -