提交 e0dc398d 编写于 作者: D dmeetry

6471906: java.lang.NegativeArraySizeException in tenToThe

Reviewed-by: darcy
Contributed-by: brian.burkhalter@oracle.com
上级 9b7a5a75
...@@ -3537,13 +3537,25 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> { ...@@ -3537,13 +3537,25 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> {
else else
return expandBigIntegerTenPowers(n); return expandBigIntegerTenPowers(n);
} }
// BigInteger.pow is slow, so make 10**n by constructing a
// BigInteger from a character string (still not very fast) if (n < 1024*524288) {
char tenpow[] = new char[n + 1]; // BigInteger.pow is slow, so make 10**n by constructing a
tenpow[0] = '1'; // BigInteger from a character string (still not very fast)
for (int i = 1; i <= n; i++) // which occupies no more than 1GB (!) of memory.
tenpow[i] = '0'; char tenpow[] = new char[n + 1];
return new BigInteger(tenpow,1, tenpow.length); tenpow[0] = '1';
for (int i = 1; i <= n; i++) {
tenpow[i] = '0';
}
return new BigInteger(tenpow, 1, tenpow.length);
}
if ((n & 0x1) == 0x1) {
return BigInteger.TEN.multiply(bigTenToThe(n - 1));
} else {
BigInteger tmp = bigTenToThe(n/2);
return tmp.multiply(tmp);
}
} }
/** /**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册