为什么这个数学会为某些数字返回负数:
int x = 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
为什么?
答案 0 :(得分:5)
这一行:
(50*x*x*x-150*x*x+400*x)/3
使用可能溢出的整数。如果一个整数达到最大值(2 ^ 31-1),它将溢出到-2 ^ 31.
你需要在这里使用BigIntegers,如下所示:
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);