通过缩放输入防止整数溢出

时间:2016-05-02 14:15:59

标签: integer-overflow

我确实有一个关于整数溢出预防的问题。

让我们考虑以下变量:

uint32_t a;
uint8_t b;

约束:

  • 只有整数算术
  • 没有64位变量
  • b <= 2

以下计算可能会产生溢出:

uint32_t c = a*b;

从我所看到的,我有以下可能的解决方案:

  1. 将乘法的结果饱和到uint32_MAX
  2. a的输入限制为(uint32_MAX / 2)
  3. 的最大值
  4. a除以特定因子(例如2)以防止乘法中的溢出。我可以保存该因子,并在计算后期使用它来重新获得正确的值。
  5. 解决此问题的好方法是什么?

    目前我倾向于使用选项3.这将确保我具有达到某个阈值的最大可能准确度,同时仍允许我执行计算(尽管我对较大的整数值失去准确性。

    选项3是否有任何缺点?

    祝你好运, plusminus

0 个答案:

没有答案