6471906: java.lang.NegativeArraySizeException in tenToThe

Reviewed-by: darcy
This commit is contained in:
Brian Burkhalter 2013-02-03 18:20:24 +04:00 committed by Dmeetry Degrave
parent e618b1556c
commit 3f02516d3e

View File

@ -3537,13 +3537,25 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> {
else
return expandBigIntegerTenPowers(n);
}
// BigInteger.pow is slow, so make 10**n by constructing a
// BigInteger from a character string (still not very fast)
char tenpow[] = new char[n + 1];
tenpow[0] = '1';
for (int i = 1; i <= n; i++)
tenpow[i] = '0';
return new BigInteger(tenpow,1, tenpow.length);
if (n < 1024*524288) {
// BigInteger.pow is slow, so make 10**n by constructing a
// BigInteger from a character string (still not very fast)
// which occupies no more than 1GB (!) of memory.
char tenpow[] = new char[n + 1];
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);
}
}
/**