来自Math.pow(65,17)%3233的令人惊讶的结果

use*_*726 0 java double largenumber modulo

出于某种原因处理大数字时,模数运算符并没有给我正确的输出,看看代码

double x = Math.pow(65,17) % 3233;
Run Code Online (Sandbox Code Playgroud)

输出应该是2790 但输出是887.0

我确定它有点傻但我无法绕过它.提前致谢

NPE*_*NPE 7

结果Math.pow(65, 17)不能完全表示为a double,并且四舍五入到最接近的数字即可.

pow(a, b) % c操作称为"模幂运算".在维基百科页面包含了很多的想法,你会如何去计算它.

这是一种可能性:

public static int powmod(int base, int exponent, int modulus) {
    if (exponent < 0)
        throw new IllegalArgumentException("exponent < 0");
    int result = 1;
    while (exponent > 0) {
        if ((exponent & 1) != 0) {
            result = (result * base) % modulus;
        }
        exponent >>>= 1;
        base = (base * base) % modulus;
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

  • 使用BigInteger. (3认同)