6186|4

61

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【求教】负数的位移和除法运算问题 [复制链接]

在做压缩算法里的量化操作的目的为了生成更多的0,以便下一步的压缩操作,

 

但我发现当执行数值小的负数位移操作时,不管位移多少位,结果都是-1,比如-3>>6 = -1,

为了达到我的目的,我用如下操作代替:

i = 1 <<6;

-3/ i  =》 0;

这样就能得到0了。

但是换成这样的除法操作后,我量化代码的执行时间由(12852时钟)变成(428614 时钟),

 

请问

(1)为什么执行时间一下就变的这么大了呢?

(2)除法操作难道这么费时间?底层汇编对除法操作是怎么操作的?

(3)怎么样才能高效率的达到我量化的目的?

[ 本帖最后由 breeze505 于 2012-6-18 14:06 编辑 ]

最新回复

除数为2的N次幂时,正数的除法与移位是相等的,但是负数的除法与移位并不等价。 假设除数为2^N,负数x的除法可以用以下方法来代替: (x + 2^N - 1) >> N 可以验证下。  详情 回复 发表于 2012-6-19 14:33
点赞 关注
 

回复
举报

5276

帖子

5

TA的资源

裸片初长成(中级)

沙发
 
(3)怎么样才能高效率的达到我量化的目的?
不知道您到底什么目的,什么叫量化操作?

-3/ i  =》 0;这一句什么意思?

3                00000011
-3              11111101
(-3)>>6     1111111b     -1d

点评

1.量化的目的是把权值小的数组元素尽量的归0 2. 比如-3>>6 = -1用操作 i = 1  详情 回复 发表于 2012-6-19 11:06
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

61

帖子

0

TA的资源

一粒金砂(高级)

板凳
 

回复 沙发 wangfuchong 的帖子

1.量化的目的是把权值小的数组元素尽量的归0
2.
比如-3>>6 = -1用操作
i = 1 <<6;
-3/ i  =》 0;代替;
上面意思是, i = 64,(即1<<6), 然后-3 / 64 是等于0(这是除法操作的结果)
,而采用位移操作-3>>6是等于-1,不能等0
3. 所以采用位移操作与我算法的目的不合,而采用除法操作CPU的执行效率很低,如何提高效率,这就是我所想问的问题
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(高级)

4
 

回复 板凳 breeze505 的帖子

除数为2的N次幂时,正数的除法与移位是相等的,但是负数的除法与移位并不等价。
假设除数为2^N,负数x的除法可以用以下方法来代替:
(x + 2^N - 1) >> N
可以验证下。

点评

不错,算了下,这个可以,虽然在这里程序执行会多几条指令,但在接下来的压缩步骤中会节省多时间!  详情 回复 发表于 2012-6-20 11:31

赞赏

1

查看全部赞赏

 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(高级)

5
 

回复 4楼 carrotchen 的帖子

不错,算了下,这个可以,虽然在这里程序执行会多几条指令,但在接下来的压缩步骤中会节省多时间!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表