一些Java Modulo / Remainder操作员问题

时间:2011-07-21 17:09:50

标签: java modulo

我一直在玩一些更大的Java值,而且我遇到了一些我不理解的东西。出于某种原因,Java似乎喜欢给我一些屁股数据(尽管我更有可能告诉它给我一些数据)

这是一个片段,为清晰起见而编辑:

        System.out.println(
                "2 == " + (Math.pow(51, 13) % (77))
        );

其中,根据Wolfram Alpha(见下面的链接),我的算法的其余部分是错误的。

(输出:)

  2 == 70.0

http://www.wolframalpha.com/input/?i=51^13+mod+77

有什么想法吗?

1 个答案:

答案 0 :(得分:7)

我认为这是因为精确问题。 double只能精确到15个左右。 Math.pow(51,13)是一个巨大的数字(~20位数),因此当您尝试将其修改为77时,您将遇到数字错误。

对于任意精度算术,请查看BigIntegerBigDecimal