C语言中的pow函数是什么?

9

我写了一个带有 math.h 库中的 power 函数的 C 代码。当我编译程序时,我收到了一个错误,即 " undefined reference to 'pow' function ",我使用 gcc 编译器 (fedora 9) 编译我的程序。

我加入了 -lm 标志到 gcc 中,那么错误被解决了,但 pow 函数的输出是 0。

#include<math.h>
main()
{
double a = 4, b = 2;
b = pow(b,a);
}

有人能帮我吗?我的编译器出了问题吗?

谢谢。


10
什么输出?你没有打印任何东西,错误被省略,但输出为0。 - cnicutar
@cnicutar - 也许OP是指pow()的返回值? - Attila
我使用printf("%d\n", b);来输出数值。 - hamb
8
出错的部分在printf这一行。请确保你发布了所有的代码。 - Graeme Perrow
可能是C的pow()函数无法使用变量指数的重复问题。 - Shubham Bansal
5个回答

14

对于其他寻找这种答案的人:

这种方法不起作用

gcc my_program.c -o my_program
它将会生成类似于这样的东西:
/tmp/cc8li91s.o: In function `main':
my_program.c:(.text+0x2d): undefined reference to `pow'
collect2: ld returned 1 exit status

这将有效:

gcc my_program.c -o my_program -lm

2
这已经在问题本身中声明了。(以及在Stack Overflow上的许多其他问答中也有提到。) - Mat

9

您的程序没有输出任何内容。

您所指的0可能是退出代码,如果您没有明确从main返回,则退出代码将为0。

尝试将其更改为符合标准的签名并返回b

int main(void) {
  ...
  return b;
}

请注意,返回值基本上仅限于8位信息,因此非常有限。
使用printf来显示该值。
#include <stdio.h>
...
  printf("%f\n", b);
...

您必须使用浮点数转换说明符 (f, ge) 来打印 double 值。不能使用 d 或其他说明符并期望输出一致。(实际上这将是未定义的行为。)


2
好的答案。我猜测 OP 使用了错误的 printf 格式说明符。 - cnicutar
我使用printf来显示b的值,b的值为0。我使用%d占位符。 - hamb
如果您像我上面所示那样使用printf,您将看到16.0000 ...%d是用于整数类型的。 - Mat
2
@cnicutar:你的水晶球非常强大。 - Mat

4

这里存在基数和指数的混淆。这并不是显而易见的,因为2^4和4^2都等于16。

void powQuestion()
{
    double a, b, c;

    a = 4.0;
    b = 2.0;
    c = pow(b, a);

    printf("%g ^ %g = %g\n", a,b,c);        // Output: 4 ^ 2 = 16

    a = 9.0;
    b = 2.0;
    c = pow(b, a);

    printf("%g ^ %g = %g\n", a,b,c);        // Output: 9 ^ 2 = 512  >> Wrong result; 512 should be 81 <<


    // K & R, Second Edition, Fifty Second Printing, p 251: pow(x,y) x to the y

    double x, y, p;

    x = 9.0;
    y = 2.0;
    p = pow(x, y);

    printf("%g ^ %g = %g\n", x, y, p);      // Output: 9 ^ 2 = 81


    // even more explicitly

    double base, exponent, power;

    base = 9.0;
    exponent = 2.0;
    power = pow(base, exponent);

    printf("%g ^ %g = %g\n", base, exponent, power);    // Output: 9 ^ 2 = 81
}

4
您缺少将值打印到标准输出的printf语句。 尝试使用以下语句:
#include <stdio.h>
#include <math.h>

int main() {
        double a=4, b=2, c;

        c = pow(b,a);
        printf("%g^%g=%g\n", a,b,c);
        return 0;
}

输出结果将是:
4^2=16

0

pow()函数返回double数据类型的值

因此,我们必须声明一个double或float数据类型的变量来存储pow()的值

您的代码中存在错误

use printf to print value





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

int main() {
        int a=4, b=2;
        double result;

        result = pow(b,a);
        printf("%d^%d=%g\n", a,b,result);
        return 0;
 } 

1
op的代码没有错误,只是它什么也没做。b = pow(a,b) 正确地计算了 ab 次方并将其存储在 b 中,而且 b 是一个 double 类型,所以没问题。op的代码唯一缺少的就是一个 printf 语句来输出一些内容。 - Willis Hershey
这里,取决于用户是否想将最终答案存储在“b”中,如果是,则可以使用以下代码: b=pow(a,b); printf(%g,b); 不需要声明“result” 感谢您的反馈。 - Shashank Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接