我一直在玩一些更大的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
有什么想法吗?
答案 0 :(得分:7)
我认为这是因为精确问题。 double
只能精确到15个左右。 Math.pow(51,13)
是一个巨大的数字(~20位数),因此当您尝试将其修改为77时,您将遇到数字错误。
对于任意精度算术,请查看BigInteger和BigDecimal。