ipefaur
ipefaur

Reputation: 49

In C why does the power function return 1 when the power is set to 1/2?

When I use the following code I tried to replicate the idea that sqrt(x) of something equals X^(1/2)

pow(x, (1/2);

It returned 1 no matter what value I entered. I already solved this issue with the sqrt function but wanted to know why this is happening for the future.

Upvotes: 3

Views: 1073

Answers (4)

Bulbasaur
Bulbasaur

Reputation: 343

1/2 in c++ is 0 since both are integers. You can use 1.0/2.0 or 0.5 to do what you want.

Upvotes: 1

Luis Colorado
Luis Colorado

Reputation: 12635

1 (integer literal) divided by 2 (integer literal) asks for integer division (on the operator /) which results in 0. From that on, you are giving 0 to a function, pow(3), that converts your 0 into 0.0 (as a double required by the function) and this is what you are calculating, x to the power of 0.0 which is 1.0.

Had you used

pow(x, (1.0/2.0)); /* there's a closing parenthesis missing in your sample code */

using floating point literals, instead of integer, the division should have been floating point, you got 0.5 as result and you should be calculating the square root of x.

By the way, you have a function sqrt(3) to do square roots, in the same library:

pru.c

#include <math.h>
#include <stdio.h>

/* ... */

int main()
{

    double x = 625.0;

    printf("square root of %.10f is %.10f\n", x, sqrt(x));
    printf("%.10f to the power 1/2 is %.10f\n", x, pow(x, 1.0/2.0));
    return 0;
}

Executing that code gives:

$ make pru
cc -O2 -Wno-error  -Werror    -o pru pru.c 
$ pru
square root of 625.0000000000 is 25.0000000000
625.0000000000 to the power 1/2 is 25.0000000000
$ _

Upvotes: 3

John Bode
John Bode

Reputation: 123458

Integer division yields an integer result, so 1/2 yields 0, not 0.5. At least one of the operands needs to be a floating point value to get a floating point result, such as 1 / 2.0. Although you can just write 0.5 and save the heartburn.

Upvotes: 1

Sourav Ghosh
Sourav Ghosh

Reputation: 134276

In it's original form, 1/2 is integer division, producing a result of 0.

Math 101: Anything raised 0, is 1.

Upvotes: 13

Related Questions