src/share/classes/java/math/MutableBigInteger.java

Print this page
rev 8880 : 8029501: BigInteger division algorithm selection heuristic is incorrect
Summary: Change Burnikel-Ziegler division heuristic to require that the dividend int-length exceed that of the divisor by a minimum amount.
Reviewed-by: TBD

*** 1146,1157 **** MutableBigInteger divide(MutableBigInteger b, MutableBigInteger quotient) { return divide(b,quotient,true); } MutableBigInteger divide(MutableBigInteger b, MutableBigInteger quotient, boolean needRemainder) { ! if (intLen < BigInteger.BURNIKEL_ZIEGLER_THRESHOLD || ! b.intLen < BigInteger.BURNIKEL_ZIEGLER_THRESHOLD) { return divideKnuth(b, quotient, needRemainder); } else { return divideAndRemainderBurnikelZiegler(b, quotient); } } --- 1146,1157 ---- MutableBigInteger divide(MutableBigInteger b, MutableBigInteger quotient) { return divide(b,quotient,true); } MutableBigInteger divide(MutableBigInteger b, MutableBigInteger quotient, boolean needRemainder) { ! if (b.intLen < BigInteger.BURNIKEL_ZIEGLER_THRESHOLD || ! intLen - b.intLen < BigInteger.BURNIKEL_ZIEGLER_OFFSET) { return divideKnuth(b, quotient, needRemainder); } else { return divideAndRemainderBurnikelZiegler(b, quotient); } }