Java 返回负数的BigInteger
为什么此数学对某些数字返回负数: INTX=351Java 返回负数的BigInteger,java,math,biginteger,Java,Math,Biginteger,为什么此数学对某些数字返回负数: INTX=351 String bigValue= ((50*x*x*x-150*x*x+400*x)/3) + ""; BigInteger resultInteger = new BigInteger(bigValue); System.out.println(resultInteger); 结果->714612600 但是如果我用352 结果->-710900565 对于x=500->639244234 为什么? 这里的这一行:
String bigValue= ((50*x*x*x-150*x*x+400*x)/3) + "";
BigInteger resultInteger = new BigInteger(bigValue);
System.out.println(resultInteger);
结果->714612600
但是如果我用352
结果->-710900565
对于x=500->639244234
为什么? 这里的这一行:
(50*x*x*x-150*x*x+400*x)/3
正在使用可能溢出的整数。如果整数达到最大值(2^31-1),它将溢出到-2^31
您需要在此处使用大整数,如下所示:
Biginteger bx = new BigInteger(x);
BigInteger new BigInteger(50).multiply(bx.pow(3)).multiply(new BigInteger(-150))
.multiply(bx.pow(2)).multiply(new BigInteger(400)).multiply(bx).divide(3);
你正在用整数进行乘法和除法运算,这些整数在某一点上会溢出。所以不可能做这个数学运算?如何打印很长的结果?为什么352会溢出,而500不会溢出?我正在更新我的答案,请稍等。@user2582318您可以使用
biginger
。通过使用biginger
方法,而不是new biginger(String)
32位有符号整数是2^31-1到-2^31。@LutzL谢谢,我忘记了符号位。