新手请教````

永远的明日 2008-05-24 11:31:14
log2(x) = log(x) / log(2);

输出log2(8)等于3,可为什么输出(int)log2(8)会等于2??(问题需要)

请教一下各位老大``,谢谢```
...全文
96 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sukyin 2008-06-04
  • 打赏
  • 举报
回复
int main()
{
printf("%d",getIntLog(3,28));
}
sukyin 2008-06-04
  • 打赏
  • 举报
回复
int getIntLog(int a, int x)
{
int i = 1;
int res = 1;
for(;;++i){
res*=a;
if(res>=x) return res==x?i:(i-1);
}
}
tsocpp 2008-06-04
  • 打赏
  • 举报
回复
因精度问题被取整了
Peterry 2008-05-24
  • 打赏
  • 举报
回复
就直接(int)log2(x)
永远的明日 2008-05-24
  • 打赏
  • 举报
回复
谢谢楼上的各位``
我想请问要怎么才能取到log2(x)的整数部分?
Peterry 2008-05-24
  • 打赏
  • 举报
回复
我想应该是这个log()函数是浮点数的计算,所以首先不是那么精确,log2(8)返回的是一个非常接近3的浮点数,但是是小于3的,当你把返回值赋给一个int变量的时候,就会被四舍五入,所以变成了3,但是当你强制类型转换的时候,浮点数转int是直接舍掉小数点后面的部分,所以就是2
baihacker 2008-05-24
  • 打赏
  • 举报
回复
可能是内部精度问题...
jintianfree 2008-05-24
  • 打赏
  • 举报
回复
楼下
paidfighting 2008-05-24
  • 打赏
  • 举报
回复
int main()
{
cout << (int)log2(8) << endl;
return 0;
}


输出3
Peterry 2008-05-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gyjudrnrso 的回复:]
.......直接(int)log2(x)就是不行呀,例如上面的log2(8)= 3 ,(int )log2(x)= 2了```````
[/Quote]

整数部分本来就是2呀
Peterry 2008-05-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gyjudrnrso 的回复:]
.......直接(int)log2(x)就是不行呀,例如上面的log2(8)= 3 ,(int )log2(x)= 2了```````
[/Quote]
它的整数部分本来就是2呀。
永远的明日 2008-05-24
  • 打赏
  • 举报
回复
.......直接(int)log2(x)就是不行呀,例如上面的log2(8)= 3 ,(int )log2(x)= 2了```````

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧