加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 优化整数和浮点乘法

发布时间:2020-12-16 10:49:44 所属栏目:百科 来源:网络整理
导读:我正在尝试优化以下操作,其中我有大量无符号短输入,需要按某个因子按比例缩小.有没有办法优化它不使用浮点运算 unsigned short val = 65523U;val = val * 0.943; 注意 我将在DSP上进行上述操作,其中浮点运算成本很高 解决方法 多重/分裂的事情是好的.但更好
我正在尝试优化以下操作,其中我有大量无符号短输入,需要按某个因子按比例缩小.有没有办法优化它不使用浮点运算

unsigned short val = 65523U;
val = val * 0.943;

注意

我将在DSP上进行上述操作,其中浮点运算成本很高

解决方法

多重/分裂的事情是好的.但更好的是你可以避免分歧.

unisisned short的范围是0 … 65535.

CPU中的所有数学计算都在内部处理为32位数.但是在计算之后它们会被抛回到16位.如果你将一个短数乘以一个大数,你想避免这种情况.输出将很短,导致它截断该值.所以我放置了强制转换来显示正在发生的事情,并确保编译器没有额外的类型转换.

unsigned short val = 65523U;

const unsigned int mult = 65536 * 0.943; // expressed as a fraction of 2^16

unsigned short output = (unsigned short)(((unsigned int)val * mult) >> 16));

因此,这会将值转换为32位无符号整数(以保证对类型的控制),根据原始分数将其乘以最多2 ^ 16,然后将其右移16,使其恢复到正确的比例.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读