提交 c76cc798 编写于 作者: D darcy

6560935: BigInteger.modPow() throws ArithmeticException for negative exponent

Reviewed-by: alanb
上级 e9207ddf
...@@ -478,7 +478,7 @@ public class BigInteger extends Number implements Comparable<BigInteger> { ...@@ -478,7 +478,7 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
/** /**
* Constructs a randomly generated BigInteger, uniformly distributed over * Constructs a randomly generated BigInteger, uniformly distributed over
* the range {@code 0} to (2<sup>{@code numBits}</sup> - 1), inclusive. * the range 0 to (2<sup>{@code numBits}</sup> - 1), inclusive.
* The uniformity of the distribution assumes that a fair source of random * The uniformity of the distribution assumes that a fair source of random
* bits is provided in {@code rnd}. Note that this constructor always * bits is provided in {@code rnd}. Note that this constructor always
* constructs a non-negative BigInteger. * constructs a non-negative BigInteger.
...@@ -1332,7 +1332,7 @@ public class BigInteger extends Number implements Comparable<BigInteger> { ...@@ -1332,7 +1332,7 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
* *
* @param val value by which this BigInteger is to be divided. * @param val value by which this BigInteger is to be divided.
* @return {@code this / val} * @return {@code this / val}
* @throws ArithmeticException {@code val==0} * @throws ArithmeticException if {@code val} is zero.
*/ */
public BigInteger divide(BigInteger val) { public BigInteger divide(BigInteger val) {
MutableBigInteger q = new MutableBigInteger(), MutableBigInteger q = new MutableBigInteger(),
...@@ -1352,7 +1352,7 @@ public class BigInteger extends Number implements Comparable<BigInteger> { ...@@ -1352,7 +1352,7 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
* @return an array of two BigIntegers: the quotient {@code (this / val)} * @return an array of two BigIntegers: the quotient {@code (this / val)}
* is the initial element, and the remainder {@code (this % val)} * is the initial element, and the remainder {@code (this % val)}
* is the final element. * is the final element.
* @throws ArithmeticException {@code val==0} * @throws ArithmeticException if {@code val} is zero.
*/ */
public BigInteger[] divideAndRemainder(BigInteger val) { public BigInteger[] divideAndRemainder(BigInteger val) {
BigInteger[] result = new BigInteger[2]; BigInteger[] result = new BigInteger[2];
...@@ -1371,7 +1371,7 @@ public class BigInteger extends Number implements Comparable<BigInteger> { ...@@ -1371,7 +1371,7 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
* @param val value by which this BigInteger is to be divided, and the * @param val value by which this BigInteger is to be divided, and the
* remainder computed. * remainder computed.
* @return {@code this % val} * @return {@code this % val}
* @throws ArithmeticException {@code val==0} * @throws ArithmeticException if {@code val} is zero.
*/ */
public BigInteger remainder(BigInteger val) { public BigInteger remainder(BigInteger val) {
MutableBigInteger q = new MutableBigInteger(), MutableBigInteger q = new MutableBigInteger(),
...@@ -1547,7 +1547,7 @@ public class BigInteger extends Number implements Comparable<BigInteger> { ...@@ -1547,7 +1547,7 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
* *
* @param m the modulus. * @param m the modulus.
* @return {@code this mod m} * @return {@code this mod m}
* @throws ArithmeticException {@code m <= 0} * @throws ArithmeticException {@code m} &le; 0
* @see #remainder * @see #remainder
*/ */
public BigInteger mod(BigInteger m) { public BigInteger mod(BigInteger m) {
...@@ -1566,7 +1566,9 @@ public class BigInteger extends Number implements Comparable<BigInteger> { ...@@ -1566,7 +1566,9 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
* @param exponent the exponent. * @param exponent the exponent.
* @param m the modulus. * @param m the modulus.
* @return <tt>this<sup>exponent</sup> mod m</tt> * @return <tt>this<sup>exponent</sup> mod m</tt>
* @throws ArithmeticException {@code m <= 0} * @throws ArithmeticException {@code m} &le; 0 or the exponent is
* negative and this BigInteger is not <i>relatively
* prime</i> to {@code m}.
* @see #modInverse * @see #modInverse
*/ */
public BigInteger modPow(BigInteger exponent, BigInteger m) { public BigInteger modPow(BigInteger exponent, BigInteger m) {
...@@ -2015,7 +2017,7 @@ public class BigInteger extends Number implements Comparable<BigInteger> { ...@@ -2015,7 +2017,7 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
* *
* @param m the modulus. * @param m the modulus.
* @return {@code this}<sup>-1</sup> {@code mod m}. * @return {@code this}<sup>-1</sup> {@code mod m}.
* @throws ArithmeticException {@code m <= 0}, or this BigInteger * @throws ArithmeticException {@code m} &le; 0, or this BigInteger
* has no multiplicative inverse mod m (that is, this BigInteger * has no multiplicative inverse mod m (that is, this BigInteger
* is not <i>relatively prime</i> to m). * is not <i>relatively prime</i> to m).
*/ */
...@@ -2449,7 +2451,7 @@ public class BigInteger extends Number implements Comparable<BigInteger> { ...@@ -2449,7 +2451,7 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
/** /**
* Returns {@code true} if this BigInteger is probably prime, * Returns {@code true} if this BigInteger is probably prime,
* {@code false} if it's definitely composite. If * {@code false} if it's definitely composite. If
* {@code certainty} is {@code <= 0}, {@code true} is * {@code certainty} is &le; 0, {@code true} is
* returned. * returned.
* *
* @param certainty a measure of the uncertainty that the caller is * @param certainty a measure of the uncertainty that the caller is
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册