Class LongMath
 java.lang.Object

 com.google.common.math.LongMath

@GwtCompatible(emulated=true) public final class LongMath extends Object
A class for arithmetic on values of typelong
. Where possible, methods are defined and named analogously to theirBigInteger
counterparts.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
int
and forBigInteger
can be found inIntMath
andBigIntegerMath
respectively. For other common operations onlong
values, seeLongs
. Since:
 11.0
 Author:
 Louis Wasserman


Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static long
binomial(int n, int k)
Returnsn
choosek
, also known as the binomial coefficient ofn
andk
, orLong.MAX_VALUE
if the result does not fit in along
.static long
ceilingPowerOfTwo(long x)
Returns the smallest power of two greater than or equal tox
.static long
checkedAdd(long a, long b)
Returns the sum ofa
andb
, provided it does not overflow.static long
checkedMultiply(long a, long b)
Returns the product ofa
andb
, provided it does not overflow.static long
checkedPow(long b, int k)
Returns theb
to thek
th power, provided it does not overflow.static long
checkedSubtract(long a, long b)
Returns the difference ofa
andb
, provided it does not overflow.static long
divide(long p, long q, RoundingMode mode)
Returns the result of dividingp
byq
, rounding using the specifiedRoundingMode
.static long
factorial(int n)
Returnsn!
, that is, the product of the firstn
positive integers,1
ifn == 0
, orLong.MAX_VALUE
if the result does not fit in along
.static long
floorPowerOfTwo(long x)
Returns the largest power of two less than or equal tox
.static long
gcd(long a, long b)
Returns the greatest common divisor ofa, b
.static boolean
isPowerOfTwo(long x)
Returnstrue
ifx
represents a power of two.static boolean
isPrime(long n)
Returnstrue
ifn
is a prime number: an integer greater than one that cannot be factored into a product of smaller positive integers.static int
log10(long x, RoundingMode mode)
Returns the base10 logarithm ofx
, rounded according to the specified rounding mode.static int
log2(long x, RoundingMode mode)
Returns the base2 logarithm ofx
, rounded according to the specified rounding mode.static long
mean(long x, long y)
Returns the arithmetic mean ofx
andy
, rounded toward negative infinity.static int
mod(long x, int m)
Returnsx mod m
, a nonnegative value less thanm
.static long
mod(long x, long m)
Returnsx mod m
, a nonnegative value less thanm
.static long
pow(long b, int k)
Returnsb
to thek
th power.static double
roundToDouble(long x, RoundingMode mode)
Returnsx
, rounded to adouble
with the specified rounding mode.static long
saturatedAdd(long a, long b)
Returns the sum ofa
andb
unless it would overflow or underflow in which caseLong.MAX_VALUE
orLong.MIN_VALUE
is returned, respectively.static long
saturatedMultiply(long a, long b)
Returns the product ofa
andb
unless it would overflow or underflow in which caseLong.MAX_VALUE
orLong.MIN_VALUE
is returned, respectively.static long
saturatedPow(long b, int k)
Returns theb
to thek
th power, unless it would overflow or underflow in which caseLong.MAX_VALUE
orLong.MIN_VALUE
is returned, respectively.static long
saturatedSubtract(long a, long b)
Returns the difference ofa
andb
unless it would overflow or underflow in which caseLong.MAX_VALUE
orLong.MIN_VALUE
is returned, respectively.static long
sqrt(long x, RoundingMode mode)
Returns the square root ofx
, rounded with the specified rounding mode.



Method Detail

ceilingPowerOfTwo
@Beta public static long ceilingPowerOfTwo(long x)
Returns the smallest power of two greater than or equal tox
. This is equivalent tocheckedPow(2, log2(x, CEILING))
. Throws:
IllegalArgumentException
 ifx <= 0
ArithmeticException
 of the nexthigher power of two is not representable as along
, i.e. whenx > 2^62
 Since:
 20.0

floorPowerOfTwo
@Beta public static long floorPowerOfTwo(long x)
Returns the largest power of two less than or equal tox
. This is equivalent tocheckedPow(2, log2(x, FLOOR))
. Throws:
IllegalArgumentException
 ifx <= 0
 Since:
 20.0

isPowerOfTwo
public static boolean isPowerOfTwo(long x)
Returnstrue
ifx
represents a power of two.This differs from
Long.bitCount(x) == 1
, becauseLong.bitCount(Long.MIN_VALUE) == 1
, butLong.MIN_VALUE
is not a power of two.

log2
public static int log2(long x, RoundingMode mode)
Returns the base2 logarithm ofx
, rounded according to the specified rounding mode. Throws:
IllegalArgumentException
 ifx <= 0
ArithmeticException
 ifmode
isRoundingMode.UNNECESSARY
andx
is not a power of two

log10
@GwtIncompatible public static int log10(long x, RoundingMode mode)
Returns the base10 logarithm ofx
, rounded according to the specified rounding mode. Throws:
IllegalArgumentException
 ifx <= 0
ArithmeticException
 ifmode
isRoundingMode.UNNECESSARY
andx
is not a power of ten

pow
@GwtIncompatible public static long pow(long b, int k)
Returnsb
to thek
th power. Even if the result overflows, it will be equal toBigInteger.valueOf(b).pow(k).longValue()
. This implementation runs inO(log k)
time. Throws:
IllegalArgumentException
 ifk < 0

sqrt
@GwtIncompatible public static long sqrt(long x, RoundingMode mode)
Returns the square root ofx
, rounded with the specified rounding mode. Throws:
IllegalArgumentException
 ifx < 0
ArithmeticException
 ifmode
isRoundingMode.UNNECESSARY
andsqrt(x)
is not an integer

divide
@GwtIncompatible public static long divide(long p, long q, RoundingMode mode)
Returns the result of dividingp
byq
, rounding using the specifiedRoundingMode
. Throws:
ArithmeticException
 ifq == 0
, or ifmode == UNNECESSARY
anda
is not an integer multiple ofb

mod
@GwtIncompatible public static int mod(long x, int m)
Returnsx mod m
, a nonnegative 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:
ArithmeticException
 ifm <= 0
 See Also:
 Remainder Operator

mod
@GwtIncompatible public static long mod(long x, long m)
Returnsx mod m
, a nonnegative 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:
ArithmeticException
 ifm <= 0
 See Also:
 Remainder Operator

gcd
public static long gcd(long a, long b)
Returns the greatest common divisor ofa, b
. Returns0
ifa == 0 && b == 0
. Throws:
IllegalArgumentException
 ifa < 0
orb < 0

checkedAdd
@GwtIncompatible public static long checkedAdd(long a, long b)
Returns the sum ofa
andb
, provided it does not overflow. Throws:
ArithmeticException
 ifa + b
overflows in signedlong
arithmetic

checkedSubtract
@GwtIncompatible public static long checkedSubtract(long a, long b)
Returns the difference ofa
andb
, provided it does not overflow. Throws:
ArithmeticException
 ifa  b
overflows in signedlong
arithmetic

checkedMultiply
public static long checkedMultiply(long a, long b)
Returns the product ofa
andb
, provided it does not overflow. Throws:
ArithmeticException
 ifa * b
overflows in signedlong
arithmetic

checkedPow
@GwtIncompatible public static long checkedPow(long b, int k)
Returns theb
to thek
th power, provided it does not overflow. Throws:
ArithmeticException
 ifb
to thek
th power overflows in signedlong
arithmetic

saturatedAdd
@Beta public static long saturatedAdd(long a, long b)
Returns the sum ofa
andb
unless it would overflow or underflow in which caseLong.MAX_VALUE
orLong.MIN_VALUE
is returned, respectively. Since:
 20.0

saturatedSubtract
@Beta public static long saturatedSubtract(long a, long b)
Returns the difference ofa
andb
unless it would overflow or underflow in which caseLong.MAX_VALUE
orLong.MIN_VALUE
is returned, respectively. Since:
 20.0

saturatedMultiply
@Beta public static long saturatedMultiply(long a, long b)
Returns the product ofa
andb
unless it would overflow or underflow in which caseLong.MAX_VALUE
orLong.MIN_VALUE
is returned, respectively. Since:
 20.0

saturatedPow
@Beta public static long saturatedPow(long b, int k)
Returns theb
to thek
th power, unless it would overflow or underflow in which caseLong.MAX_VALUE
orLong.MIN_VALUE
is returned, respectively. Since:
 20.0

factorial
@GwtIncompatible public static long factorial(int n)
Returnsn!
, that is, the product of the firstn
positive integers,1
ifn == 0
, orLong.MAX_VALUE
if the result does not fit in along
. Throws:
IllegalArgumentException
 ifn < 0

binomial
public static long binomial(int n, int k)
Returnsn
choosek
, also known as the binomial coefficient ofn
andk
, orLong.MAX_VALUE
if the result does not fit in along
. Throws:
IllegalArgumentException
 ifn < 0
,k < 0
, ork > n

mean
public static long mean(long x, long y)
Returns the arithmetic mean ofx
andy
, rounded toward negative infinity. This method is resilient to overflow. Since:
 14.0

isPrime
@GwtIncompatible @Beta public static boolean isPrime(long n)
Returnstrue
ifn
is a prime number: an integer greater than one that cannot be factored into a product of smaller positive integers. Returnsfalse
ifn
is zero, one, or a composite number (one which can be factored into smaller positive integers).To test larger numbers, use
BigInteger.isProbablePrime(int)
. Throws:
IllegalArgumentException
 ifn
is negative Since:
 20.0

roundToDouble
@GwtIncompatible public static double roundToDouble(long x, RoundingMode mode)
Returnsx
, rounded to adouble
with the specified rounding mode. Ifx
is precisely representable as adouble
, itsdouble
value will be returned; otherwise, the rounding will choose between the two nearest representable values withmode
.For the case of
RoundingMode.HALF_EVEN
, this implementation uses the IEEE 754 default rounding mode: if the two nearest representable values are equally near, the one with the least significant bit zero is chosen. (In such cases, both of the nearest representable values are even integers; this method returns the one that is a multiple of a greater power of two.) Throws:
ArithmeticException
 ifmode
isRoundingMode.UNNECESSARY
andx
is not precisely representable as adouble
 Since:
 30.0

