我正在尝试优化以下操作,其中我有大量无符号短输入,需要按一定比例缩小。有没有办法优化它不使用浮点运算
unsigned short val = 65523U;
val = val * 0.943;
注意
我将在浮点运算成本很高的 DSP 上运行上述运算
最佳答案
最简单的方法是只使用可以保存结果的 32 位类型:
uint16_t val = 65523U;
val = (uint_fast32_t)val * 943 / 1000;
或者,如果您想要更高的类型正确性和可移植性,同时允许编译器使用可能的最佳整数类型来完成任务:
#include <stdint.h>
uint_fast16_t val = UINT16_C(65523);
val = (uint_fast16_t) ( (uint_fast32_t)val * (uint_fast32_t)943 / (uint_fast32_t)1000 );
关于c++ - 优化整数和浮点乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43047559/