如果您尝试运行以下代码
public class Main {
public static void main(String[] args) {
long a = (long)Math.pow(13, 15);
System.out.println(a + " " + a%13);
}
}
你会得到“51185893014090752 8”
的正确值13 ^ 15是51185893014090757,即,比由返回的结果更大的Math.pow
由5。任何可能导致它的想法?
发布于 2018-09-05 10:02:08
您已经超过了双精度浮点值中可用的有效位数(~15到16)。一旦你这样做,你不能指望你的结果中最不重要的数字实际上是有意义的/精确的。
如果您需要在Java中进行任意精确的算术运算,请考虑使用BigInteger
和BigDecimal
。
发布于 2018-09-05 10:52:18
double具有有限精度,其尾数为52位,大致等于15到16位小数。因此,您尝试计算的数字不能再精确地用双精度表示。
https://stackoverflow.com/questions/-100002562
复制相似问题