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,使其恢复到正确的比例. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |