6471906: java.lang.NegativeArraySizeException in tenToThe
Reviewed-by: darcy
This commit is contained in:
parent
e618b1556c
commit
3f02516d3e
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user