Question:
I tried to calculate it like this, but pow
only returns the number 1 for me:
int funcao1(int y,int z){
int k;
k = pow(y,1/z);
return(k);
}
Answer:
Try it like this:
double funcao1(int y,int z){
double k;
k = pow(y,1.0/z);
return(k);
}
Or better yet:
double raiz(int radicando, int indice){
return pow(radicando, 1.0/indice);
}
What has changed:
1) the root of a number can be fractional, so you must return float
or double
otherwise there will be rounding.
2) Since z
is an integer and you were doing 1/z
, this result will also be an integer, since the constant 1
is treated as an integer and C does not automatically promote the result of an integer division to float
or double
. If you were to pass, say 4 and 2, the function would raise 4 to 1/2, but 1/2 is zero when we convert to integer (rounding is down). Anything raised to zero is 1, hence the constant result you were getting. The solution is to use 1.0
instead of 1
, which forces the result type to be double