避免算术溢出

UmN*_*obe 2 c java math precision

假设你有2个正longab其是大于2^32(高于和更小2^63),和一个长整数c.在java和\或c中执行诸如的操作的最佳方法是什么

(a*b)%c
Run Code Online (Sandbox Code Playgroud)

同时避免算术溢出.

编辑:c是各地2^34,有时A和B都只是间2^32c...

我终于避免使用我BigInteger所处的特定情况.事实上,有可能知道两者的一个除数ab(并非总是如此),所以我会使用算术属性modulo对我有利.

Oli*_*rth 8

假设一切都是正面的,那么你可以使用以下数学标识:

(a*b)%c == ((a%c) * (b%c)) % c
Run Code Online (Sandbox Code Playgroud)

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

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