java - 避免算术溢出

标签 java c math precision

假设您有 2 个正 longab,它们大于 2^32(并且小于2^63),以及一个长整数c。 在 java 和/或 c 中,执行诸如此类的操作的最佳方法是什么?

(a*b)%c

同时避免算术溢出。

编辑: c 在 2^34 左右,有时 a 和 b 都在 2^32c 之间...

对于我所处的具体情况,我最终避免使用 BigInteger。事实上,可以知道 ab 的一个除数> (情况并非总是如此),因此我会使用取模的算术属性来发挥我的优势。

最佳答案

假设一切都是积极的,那么您可以使用以下数学恒等式:

(a*b)%c == ((a%c) * (b%c)) % c

当然,这仍然不能消除溢出的可能性。

完全避免该问题的最简单方法是使用大整数库。

关于java - 避免算术溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9455296/

相关文章:

iphone - Xcode 说 : "No memory available to program now: unsafe to call malloc"

math - 如何在Y轴上反射角度

java - 如何删除事件处理程序单击上的所有标签

java - 如何将Optional.isPresent()+Optional.get()重构为Optional.ifPresent()?

c++ - 如何为堆栈变量分配内存?

python - 求解二次和三次多项式的三次函数?

java - 如何正确地将具有给定小数位数的浮点值的字符串解析为整数?

java - JSTL 调用一个不是 setter 或 getter 的方法

java - Android 游戏(Llama 或 Duck)内存不足错误

c - C 中的下标数组