给定一个2的幂的整数(2 ^ n),我想找出n,使用对数的索引值.查找索引的公式为:log(number)/ log(2).以下是代码段:
unsigned long int a;
double apower;
apower = log((double)a) / log((double)2);
Run Code Online (Sandbox Code Playgroud)
我发现'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);
Run Code Online (Sandbox Code Playgroud)
a和b的值总是2的幂.所以apower和bpower必须在小数位数为00.这就是为什么count的值将是int(%d).我只是想知道Logarithm的行为.
我只回答了你的一半问题,因为没有必要使用日志来解决这个问题.一个简单的方法是使用这个:
unsigned long long a = 0x8000000000000000ULL;
int n = 0;
while (a >>= 1) n++;
printf("%d\n", n);
Run Code Online (Sandbox Code Playgroud)
输出:
63
Run Code Online (Sandbox Code Playgroud)
转换为日志和分区可能会导致重要性丢失,在这种情况下您应该使用round.你使用"提交"这个词,这是一个失败的在线挑战?你究竟打印了什么?(在这种情况下)63.000000?这将从默认格式得到%f.
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |