以下是我无法弄清楚为什么它不起作用的代码(我总是得到像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 ++ ),其余的则有结构略有不同,由于这种差异可能会出现问题。
答案 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()
。