【发布时间】:2012-02-26 17:24:38
【问题描述】:
假设您有两个大于2^32(且小于2^63)的正long 值a 和b,以及一个长整数c。
在java和\或c中,执行诸如
(a*b)%c
同时避免算术溢出。
编辑:
c 在2^34 附近,有时a 和b 都在2^32 和c 之间...
对于我所处的具体情况,我终于避免使用BigInteger。事实上,有可能知道a 和b 的一个除数(并非总是如此),所以我会使用算术属性modulo 对我有利。
【问题讨论】:
-
假设
long是 64 位类型 ... -
gcc 4.6提供类型__int128作为扩展:Support for a new data type __int128 for targets having wide enough machine-mode support.。 -
如果 c 正好是 2^34 或 2 的任何幂,无论是否溢出,结果都是一样的。