c++ - 优化整数和浮点乘法

标签 c++ c floating-point

我正在尝试优化以下操作,其中我有大量无符号短输入,需要按一定比例缩小。有没有办法优化它不使用浮点运算

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/

相关文章:

c++ - 用 C 或 C++ 编写引导加载程序?

c++ - 继承类型定义?

java - 小数java

c - 为什么我需要 17 位有效数字(而不是 16 位)来表示 double ?

c++ - 了解源代码中头文件连接的库

c++ - DirectX9 中的 Alpha 混合问题

c - 使用 fgets 和 strtok 时出现段错误

arrays - 在 clang 中用大括号括起来的列表初始化的 char 数组中的尾随符号是什么?

c++ - 如何发出包含 'suspicious' 和 '-Wmain' 字样的警告?

c++ - 检查 C/C++ 中的数字是否为整数(不使用 scanf/gets/etc)