大数的Java计算能力

时间:2020-10-25 09:31:35

标签: java calculation

我是Java的新手,当我尝试使用Math.pow方法查找数字的幂时,我意识到答案是不正确的。我想了解为什么?

public class Main() {

int x = 1919;
int y = x*x*x*x;

public static void main(String[] args) {

System.out.println(y);
}
}

输出:2043765249

但通常的答案是:13561255518721

3 个答案:

答案 0 :(得分:3)

您正在使用整数作为答案,得到了数值溢出。

y使用double或long或BigInteger,您将获得正确的答案。

public class Main {

    public static void main(String[] args) {
        System.out.println(Math.pow(1919, 4));
        System.out.println((double) 1919*1919*1919*1919);
    }
}

输出相同的值。

答案 1 :(得分:3)

如果逐步进行操作,您会发现该值立即变为负值,这是因为您达到了Integer.MAX_VALUE的{​​{1}}

2^31 -1

您可以使用更大的类型,例如int x = 1919; int y = 1; for (int i = 0; i < 4; i++) { y *= x; System.out.println(i + "> " + y); } 0> 1919 1> 3682561 2> -1523100033 3> 2043765249 double

BigInteger

答案 2 :(得分:0)

使用long代替int

public class Main{
    public static void main(String[] args) {
        long x = 1919;
        long y = x*x*x*x;
        System.out.println(y);
    }
}

Read about variables in Java.