8271225: Add floorDivExact() method to java.lang.[Strict]Math

Reviewed-by: darcy
This commit is contained in:
Brian Burkhalter 2021-08-31 14:42:14 +00:00
parent e67125512f
commit e551852801
3 changed files with 205 additions and 3 deletions

View file

@ -863,6 +863,9 @@ public final class StrictMath {
* <p>
* If {@code y} is zero, an {@code ArithmeticException} is thrown
* (JLS {@jls 15.17.2}).
* <p>
* The built-in remainder operator "{@code %}" is a suitable counterpart
* both for this method and for the built-in division operator "{@code /}".
*
* @param x the dividend
* @param y the divisor
@ -887,6 +890,9 @@ public final class StrictMath {
* <p>
* If {@code y} is zero, an {@code ArithmeticException} is thrown
* (JLS {@jls 15.17.2}).
* <p>
* The built-in remainder operator "{@code %}" is a suitable counterpart
* both for this method and for the built-in division operator "{@code /}".
*
* @param x the dividend
* @param y the divisor
@ -901,6 +907,66 @@ public final class StrictMath {
return Math.divideExact(x, y);
}
/**
* Returns the largest (closest to positive infinity)
* {@code int} value that is less than or equal to the algebraic quotient.
* This method is identical to {@link #floorDiv(int,int)} except that it
* throws an {@code ArithmeticException} when the dividend is
* {@linkplain Integer#MIN_VALUE Integer.MIN_VALUE} and the divisor is
* {@code -1} instead of ignoring the integer overflow and returning
* {@code Integer.MIN_VALUE}.
* <p>
* The floor modulus method {@link #floorMod(int,int)} is a suitable
* counterpart both for this method and for the {@link #floorDiv(int,int)}
* method.
* <p>
* See {@link Math#floorDiv(int, int) Math.floorDiv} for examples and
* a comparison to the integer division {@code /} operator.
*
* @param x the dividend
* @param y the divisor
* @return the largest (closest to positive infinity)
* {@code int} value that is less than or equal to the algebraic quotient.
* @throws ArithmeticException if the divisor {@code y} is zero, or the
* dividend {@code x} is {@code Integer.MIN_VALUE} and the divisor {@code y}
* is {@code -1}.
* @see Math#floorDiv(int, int)
* @since 18
*/
public static int floorDivExact(int x, int y) {
return Math.floorDivExact(x, y);
}
/**
* Returns the largest (closest to positive infinity)
* {@code long} value that is less than or equal to the algebraic quotient.
* This method is identical to {@link #floorDiv(long,long)} except that it
* throws an {@code ArithmeticException} when the dividend is
* {@linkplain Long#MIN_VALUE Long.MIN_VALUE} and the divisor is
* {@code -1} instead of ignoring the integer overflow and returning
* {@code Long.MIN_VALUE}.
* <p>
* The floor modulus method {@link #floorMod(long,long)} is a suitable
* counterpart both for this method and for the {@link #floorDiv(long,long)}
* method.
* <p>
* For examples, see {@link Math#floorDiv(int, int) Math.floorDiv}.
*
* @param x the dividend
* @param y the divisor
* @return the largest (closest to positive infinity)
* {@code long} value that is less than or equal to the algebraic quotient.
* @throws ArithmeticException if the divisor {@code y} is zero, or the
* dividend {@code x} is {@code Long.MIN_VALUE} and the divisor {@code y}
* is {@code -1}.
* @see Math#floorDiv(int, int)
* @see Math#floorDiv(long,long)
* @since 18
*/
public static long floorDivExact(long x, long y) {
return Math.floorDivExact(x, y);
}
/**
* Returns the argument incremented by one,
* throwing an exception if the result overflows an {@code int}.