C中的Pow()函数

时间:2015-03-31 14:06:29

标签: c double pow math.h

以下是我无法弄清楚为什么它不起作用的代码(我总是得到像0.000000这样的结果):

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

int main ()
{
    double num,b;
    printf("Write a number between 0 and 256"); scanf("%lf",&num);
    num = pow(2.0,b);
    printf("%lf",b);    
    return 0 ;
}

此处, pow 的答案称为 num ,因为它是由用户引入的,我正在尝试找到 b 哪个在函数内部!

实际上,我在这里看到了类似的问题,但其中一些依赖于 gcc 的解决方案,(我正在使用 Dev C ++ ),其余的则有结构略有不同,由于这种差异可能会出现问题。

4 个答案:

答案 0 :(得分:6)

你可能意味着

b = pow(2.0, num);

在第七行。正如reference所说,pow方法的原型是:

double pow (double base, double exponent);

因此,您将获得从给定的参数返回的计算结果。

如果你实际上意味着你正在寻找基数2的对数,那么你应该使用对数:

b = log2(num);

这可以使用<tgmath.h>标题在C99中使用,或者您可以使用@SleuthEye答案中的解决方案

标题包含也有一个拼写错误,如@Paul R所述。

答案 1 :(得分:2)

要获取b pow(2.0,b) == num的值,您应使用logarithms(与pow的倒数相关)来获取:

b = log(num)/log(2.0);

答案 2 :(得分:0)

您应该初始化b。您使用了#include<math.h.>,这是错误的。试试#include<math.h>

答案 3 :(得分:0)

C不是数学。它不会试图为您找到b的值。您实际上将其值(包含垃圾)作为参数传递,并将pow()的未定义结果存储在num中,覆盖您在那里读取的内容。然后,显示未定义的b值,因为您处于调试模式,因此该值为零。

出于您的目的,请尝试使用log()