给定一个整数 (2^n),它是 2 的幂,我想用对数求出 n,即索引值。查找索引的公式是:log(number)/log(2)。以下是代码片段:
unsigned long int a;
double apower;
apower = log((double)a) / log((double)2);
我发现'apower'的值在a的某个大值处是错误的,我不知道这个值,因为我的代码在提交后失败了。为什么会这样?有一些类型转换问题吗?
以下是整个片段:
int count = 0;
unsigned long int a,b;
double apower,bpower;
apower = log((double)a) / log((double)2);
bpower = log((double)b) / log((double)2);
count = abs(apower - bpower);
printf("%d\n",count);
a 和 b 的值始终是 2 的幂。因此 apower 和 bpower 的小数位必须为 00。这就是为什么 count 的值将是 int (%d) 的原因。 我只想知道对数的行为。
最佳答案
我只回答了你问题的一半,因为没有必要用日志来解决这个问题。一个简单的方法是使用这个:
unsigned long long a = 0x8000000000000000ULL;
int n = 0;
while (a >>= 1) n++;
printf("%d\n", n);
输出:
63
转换为日志和分割可能会导致失去意义,在这种情况下你应该使用round
。你用了“提交”这个词,所以这是一个失败的在线挑战?你到底打印了什么? (在这种情况下)63.000000
?这将从 %f
的默认格式中获取。
关于c - 给定 2^n,使用对数求 n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32426561/