查看: 2418| 回复: 6
跳转到指定楼层
上一主题 下一主题
收起左侧

[学C/C++] 求一个非负整数的bit pattern的时候出的问题

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
本帖最后由 ykay25 于 2016-5-17 17:51 编辑

闲着无聊写的,发现出了一个很奇怪的问题,如下



就是把这个非负整数分解成2的次方加和,
如果有8存在,而且8是最后一项的话,比如56=32+16+8,或者24=16+8,或者8自己,等等,就会出现这样的错误。。。。。。其他都不会出错

而且输入64的话也会变成 x = 64, a = 5, x = 32, a = 5,所以一个正整数分解成2的次方加和,最后一项为64或8分解出来都有这样的问题,

4096也是。。。。。。


上一篇:求亚麻的面筋总结
下一篇:task之间有间隔,输出task最优执行序列
🔗
 楼主| ykay25 2016-5-17 17:38:43 | 只看该作者
全局:
因为本来想设计只放8个bit制的所以array就取了8项,不过这个不是重点。。。。
回复

使用道具 举报

🔗
 楼主| ykay25 2016-5-17 17:39:31 | 只看该作者
全局:
7那里是0000 0111 被我画的红色勾挡掉了
回复

使用道具 举报

🔗
 楼主| ykay25 2016-5-17 17:46:01 | 只看该作者
全局:
本帖最后由 ykay25 于 2016-5-17 17:50 编辑

尝试了直接
cout一个 log(8) / log(2),输出结果的确是3,
cout一个 log(64) / log(2),输出结果的确是6,

非常不理解。。。

回复

使用道具 举报

🔗
stellari 2016-5-18 23:52:15 | 只看该作者
全局:
提示一句,你把a先改成double型,你自己看一下打印出的结果是什么?
回复

使用道具 举报

🔗
 楼主| ykay25 2016-5-19 10:17:50 | 只看该作者
全局:
stellari 发表于 2016-5-18 23:52
提示一句,你把a先改成double型,你自己看一下打印出的结果是什么?

求明示原因……

改成double输出的确是a=3!但是a改成double不符合我的设计意图啊
回复

使用道具 举报

🔗
stellari 2016-5-19 13:17:45 | 只看该作者
全局:
ykay25 发表于 2016-5-19 10:17
求明示原因……

改成double输出的确是a=3!但是a改成double不符合我的设计意图啊

原因是,浮点数的计算不能保证一定精确。log(8)/log(2)的理论值确实是3,但是对于有限位数的浮点数来说,实际计算的结果可能大于或小于理论值。在这种情况下,计算出的实际值估计是2.999999999999。看起来好像和3差不多?但是一旦你把这个结果赋给一个int型,小数部分就会被全部被舍去,于是就成了2,就导致了巨大的差别。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表