C's pow function refuses to work with variable exponent

c pow
user12163 picture user12163 · Dec 13, 2010 · Viewed 14.6k times · Source

Let's say I have the following code snippet:

int i; double value;
for(i = 0; i < CONSTANT; i++) {
  value = (double)pow(2, i);
}

Trying to compile this code yields an "undefined reference to `pow'" error.

Including or excluding math.h makes no difference, since it ends up being included anyway.

Raising 2.0 to a hardcoded power works okay, but everything fails if I substitute the exponent by an expression that contains i.

What am I doing wrong? Thanks.

Answer

qdot picture qdot · Dec 13, 2010

It's a very interesting behavior, and a good learning example.

To solve your problem, add

-lm

to your gcc command line (provided you're using gcc). This tells the compiler to link against the math library.

What seems to be going on, is that if you're using

pow(2.0, 3);

the compiler realizes this expression evaluates to a constant, and does mere substitution.

Thus, no library function has to be called.