Package com.google.common.math
Class IntMath
- java.lang.Object
-
- com.google.common.math.IntMath
-
@GwtCompatible(emulated=true) public final class IntMath extends java.lang.Object
A class for arithmetic on values of typeint. Where possible, methods are defined and named analogously to theirBigIntegercounterparts.The implementations of many methods in this class are based on material from Henry S. Warren, Jr.'s Hacker's Delight, (Addison Wesley, 2002).
Similar functionality for
longand forBigIntegercan be found inLongMathandBigIntegerMathrespectively. For other common operations onintvalues, seeInts.- Since:
- 11.0
- Author:
- Louis Wasserman
-
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static intbinomial(int n, int k)Returnsnchoosek, also known as the binomial coefficient ofnandk, orInteger.MAX_VALUEif the result does not fit in anint.static intceilingPowerOfTwo(int x)Returns the smallest power of two greater than or equal tox.static intcheckedAdd(int a, int b)Returns the sum ofaandb, provided it does not overflow.static intcheckedMultiply(int a, int b)Returns the product ofaandb, provided it does not overflow.static intcheckedPow(int b, int k)Returns thebto thekth power, provided it does not overflow.static intcheckedSubtract(int a, int b)Returns the difference ofaandb, provided it does not overflow.static intdivide(int p, int q, java.math.RoundingMode mode)Returns the result of dividingpbyq, rounding using the specifiedRoundingMode.static intfactorial(int n)Returnsn!, that is, the product of the firstnpositive integers,1ifn == 0, orInteger.MAX_VALUEif the result does not fit in aint.static intfloorPowerOfTwo(int x)Returns the largest power of two less than or equal tox.static intgcd(int a, int b)Returns the greatest common divisor ofa, b.static booleanisPowerOfTwo(int x)Returnstrueifxrepresents a power of two.static booleanisPrime(int n)Returnstrueifnis a prime number: an integer greater than one that cannot be factored into a product of smaller positive integers.static intlog10(int x, java.math.RoundingMode mode)Returns the base-10 logarithm ofx, rounded according to the specified rounding mode.static intlog2(int x, java.math.RoundingMode mode)Returns the base-2 logarithm ofx, rounded according to the specified rounding mode.static intmean(int x, int y)Returns the arithmetic mean ofxandy, rounded towards negative infinity.static intmod(int x, int m)Returnsx mod m, a non-negative value less thanm.static intpow(int b, int k)Returnsbto thekth power.static intsaturatedAdd(int a, int b)Returns the sum ofaandbunless it would overflow or underflow in which caseInteger.MAX_VALUEorInteger.MIN_VALUEis returned, respectively.static intsaturatedMultiply(int a, int b)Returns the product ofaandbunless it would overflow or underflow in which caseInteger.MAX_VALUEorInteger.MIN_VALUEis returned, respectively.static intsaturatedPow(int b, int k)Returns thebto thekth power, unless it would overflow or underflow in which caseInteger.MAX_VALUEorInteger.MIN_VALUEis returned, respectively.static intsaturatedSubtract(int a, int b)Returns the difference ofaandbunless it would overflow or underflow in which caseInteger.MAX_VALUEorInteger.MIN_VALUEis returned, respectively.static intsqrt(int x, java.math.RoundingMode mode)Returns the square root ofx, rounded with the specified rounding mode.
-
-
-
Method Detail
-
ceilingPowerOfTwo
public static int ceilingPowerOfTwo(int x)
Returns the smallest power of two greater than or equal tox. This is equivalent tocheckedPow(2, log2(x, CEILING)).- Throws:
java.lang.IllegalArgumentException- ifx <= 0java.lang.ArithmeticException- of the next-higher power of two is not representable as anint, i.e. whenx > 2^30- Since:
- 20.0
-
floorPowerOfTwo
public static int floorPowerOfTwo(int x)
Returns the largest power of two less than or equal tox. This is equivalent tocheckedPow(2, log2(x, FLOOR)).- Throws:
java.lang.IllegalArgumentException- ifx <= 0- Since:
- 20.0
-
isPowerOfTwo
public static boolean isPowerOfTwo(int x)
Returnstrueifxrepresents a power of two.This differs from
Integer.bitCount(x) == 1, becauseInteger.bitCount(Integer.MIN_VALUE) == 1, butInteger.MIN_VALUEis not a power of two.
-
log2
public static int log2(int x, java.math.RoundingMode mode)
Returns the base-2 logarithm ofx, rounded according to the specified rounding mode.- Throws:
java.lang.IllegalArgumentException- ifx <= 0java.lang.ArithmeticException- ifmodeisRoundingMode.UNNECESSARYandxis not a power of two
-
log10
@GwtIncompatible public static int log10(int x, java.math.RoundingMode mode)
Returns the base-10 logarithm ofx, rounded according to the specified rounding mode.- Throws:
java.lang.IllegalArgumentException- ifx <= 0java.lang.ArithmeticException- ifmodeisRoundingMode.UNNECESSARYandxis not a power of ten
-
pow
@GwtIncompatible public static int pow(int b, int k)
Returnsbto thekth power. Even if the result overflows, it will be equal toBigInteger.valueOf(b).pow(k).intValue(). This implementation runs inO(log k)time.Compare
checkedPow(int, int), which throws anArithmeticExceptionupon overflow.- Throws:
java.lang.IllegalArgumentException- ifk < 0
-
sqrt
@GwtIncompatible public static int sqrt(int x, java.math.RoundingMode mode)
Returns the square root ofx, rounded with the specified rounding mode.- Throws:
java.lang.IllegalArgumentException- ifx < 0java.lang.ArithmeticException- ifmodeisRoundingMode.UNNECESSARYandsqrt(x)is not an integer
-
divide
public static int divide(int p, int q, java.math.RoundingMode mode)
Returns the result of dividingpbyq, rounding using the specifiedRoundingMode.- Throws:
java.lang.ArithmeticException- ifq == 0, or ifmode == UNNECESSARYandais not an integer multiple ofb
-
mod
public static int mod(int x, int m)
Returnsx mod m, a non-negative value less thanm. This differs fromx % m, which might be negative.For example:
mod(7, 4) == 3 mod(-7, 4) == 1 mod(-1, 4) == 3 mod(-8, 4) == 0 mod(8, 4) == 0- Throws:
java.lang.ArithmeticException- ifm <= 0- See Also:
- Remainder Operator
-
gcd
public static int gcd(int a, int b)
Returns the greatest common divisor ofa, b. Returns0ifa == 0 && b == 0.- Throws:
java.lang.IllegalArgumentException- ifa < 0orb < 0
-
checkedAdd
public static int checkedAdd(int a, int b)
Returns the sum ofaandb, provided it does not overflow.- Throws:
java.lang.ArithmeticException- ifa + boverflows in signedintarithmetic
-
checkedSubtract
public static int checkedSubtract(int a, int b)
Returns the difference ofaandb, provided it does not overflow.- Throws:
java.lang.ArithmeticException- ifa - boverflows in signedintarithmetic
-
checkedMultiply
public static int checkedMultiply(int a, int b)
Returns the product ofaandb, provided it does not overflow.- Throws:
java.lang.ArithmeticException- ifa * boverflows in signedintarithmetic
-
checkedPow
public static int checkedPow(int b, int k)
Returns thebto thekth power, provided it does not overflow.pow(int, int)may be faster, but does not check for overflow.- Throws:
java.lang.ArithmeticException- ifbto thekth power overflows in signedintarithmetic
-
saturatedAdd
public static int saturatedAdd(int a, int b)
Returns the sum ofaandbunless it would overflow or underflow in which caseInteger.MAX_VALUEorInteger.MIN_VALUEis returned, respectively.- Since:
- 20.0
-
saturatedSubtract
public static int saturatedSubtract(int a, int b)
Returns the difference ofaandbunless it would overflow or underflow in which caseInteger.MAX_VALUEorInteger.MIN_VALUEis returned, respectively.- Since:
- 20.0
-
saturatedMultiply
public static int saturatedMultiply(int a, int b)
Returns the product ofaandbunless it would overflow or underflow in which caseInteger.MAX_VALUEorInteger.MIN_VALUEis returned, respectively.- Since:
- 20.0
-
saturatedPow
public static int saturatedPow(int b, int k)
Returns thebto thekth power, unless it would overflow or underflow in which caseInteger.MAX_VALUEorInteger.MIN_VALUEis returned, respectively.- Since:
- 20.0
-
factorial
public static int factorial(int n)
Returnsn!, that is, the product of the firstnpositive integers,1ifn == 0, orInteger.MAX_VALUEif the result does not fit in aint.- Throws:
java.lang.IllegalArgumentException- ifn < 0
-
binomial
public static int binomial(int n, int k)
Returnsnchoosek, also known as the binomial coefficient ofnandk, orInteger.MAX_VALUEif the result does not fit in anint.- Throws:
java.lang.IllegalArgumentException- ifn < 0,k < 0ork > n
-
mean
public static int mean(int x, int y)
Returns the arithmetic mean ofxandy, rounded towards negative infinity. This method is overflow resilient.- Since:
- 14.0
-
isPrime
@GwtIncompatible public static boolean isPrime(int n)
Returnstrueifnis a prime number: an integer greater than one that cannot be factored into a product of smaller positive integers. Returnsfalseifnis zero, one, or a composite number (one which can be factored into smaller positive integers).To test larger numbers, use
LongMath.isPrime(long)orBigInteger.isProbablePrime(int).- Throws:
java.lang.IllegalArgumentException- ifnis negative- Since:
- 20.0
-
-