我确实有一个关于整数溢出预防的问题。
让我们考虑以下变量:
uint32_t a;
uint8_t b;
约束:
以下计算可能会产生溢出:
uint32_t c = a*b;
从我所看到的,我有以下可能的解决方案:
a
的输入限制为(uint32_MAX / 2)a
除以特定因子(例如2)以防止乘法中的溢出。我可以保存该因子,并在计算后期使用它来重新获得正确的值。解决此问题的好方法是什么?
目前我倾向于使用选项3.这将确保我具有达到某个阈值的最大可能准确度,同时仍允许我执行计算(尽管我对较大的整数值失去准确性。
选项3是否有任何缺点?
祝你好运, plusminus