Hi Christian,
Christian Thalinger a écrit :
On Mon, 2009-02-16 at 14:33 -0800, Xiaobin Lu wrote:
Webrev: http://webrev.invokedynamic.info/xiaobin.lu/6622432/
6622432: RFE: Performance improvements to java.math.BigDecimal
<snip>
As you know, the division operation is expensive and the
algorithm to compare with the ten's power array can be made more
efficiently by correlating the bit length of the number with the index
to the array so that the time to compute the precision is O(1) rather
than being O(n) (where n is the length of the array). And that is
exactly what we are doing in the webrev. First, we get the bit length of
the number and then multiply it with log2 (10 base), use the result to
index to a dynamically expanded ten's power array so that division
operation can be avoided completely.
Actually I'm not reviewing the webrev but I have some questions.
1. Is bitCount() called often and performance critical? There is a RFE
(6378821) to intrinsify it and I am thinking about to implement it.
It's not related to BigInteger but the fastest multi-dispatch algorithm
that I know relies heavily on
bitCount too (on Long.bitCount).
So you have my vote :)
2. Why is BigInteger using it's own implementation of bit-count
(bitCnt()) instead of using Integer.bitCount()?
because Integer.bitCount() was introduced in 1.5 and BigInteger in 1.4.
BigInteger was not retrofited.
-- Christian
Rémi