Class MathUtil


  • public final class MathUtil
    extends java.lang.Object
    Math utility class.

    Method names in this class are prefixed with math to avoid ambiguities when used with static imports.

    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static long mathDivideUnsigned​(long dividend, long divisor)
      Returns the unsigned quotient of dividing the first argument by the second where each argument and the result is interpreted as an unsigned value.
      static boolean mathHasZeroByte​(int value)  
      static boolean mathHasZeroByte​(long value)  
      static boolean mathHasZeroShort​(int value)  
      static boolean mathHasZeroShort​(long value)  
      static boolean mathIsPoT​(int value)
      Returns true if the specified integer value is a power-of-two number.
      static long mathMultiplyHighS64​(long x, long y)
      Returns as the most significant 64 bits of the 128-bit product of two int64_t factors.
      static long mathMultiplyHighU64​(long x, long y)
      Returns as the most significant 64 bits of the 128-bit product of two uint64_t factors.
      static long mathRemainderUnsigned​(long dividend, long divisor)
      Returns the unsigned remainder from dividing the first argument by the second where each argument and the result is interpreted as an unsigned value.
      static int mathRoundPoT​(int value)
      Rounds the specified integer value up to the next power-of-two number.
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Method Detail

      • mathIsPoT

        public static boolean mathIsPoT​(int value)
        Returns true if the specified integer value is a power-of-two number.
        Parameters:
        value - the value to test
        Returns:
        true if the value if a power-of-two number.
      • mathRoundPoT

        public static int mathRoundPoT​(int value)
        Rounds the specified integer value up to the next power-of-two number. The returned value will be equal to value if it already is a power-of-two number.
        Parameters:
        value - the value to round-up. Must be a number between 1 and 1 << 30.
        Returns:
        the power-of-two rounded value
      • mathHasZeroByte

        public static boolean mathHasZeroByte​(int value)
      • mathHasZeroByte

        public static boolean mathHasZeroByte​(long value)
      • mathHasZeroShort

        public static boolean mathHasZeroShort​(int value)
      • mathHasZeroShort

        public static boolean mathHasZeroShort​(long value)
      • mathMultiplyHighU64

        public static long mathMultiplyHighU64​(long x,
                                               long y)
        Returns as the most significant 64 bits of the 128-bit product of two uint64_t factors.
        Parameters:
        x - the first value
        y - the second value
        Returns:
        the result
      • mathMultiplyHighS64

        public static long mathMultiplyHighS64​(long x,
                                               long y)
        Returns as the most significant 64 bits of the 128-bit product of two int64_t factors.
        Parameters:
        x - the first value
        y - the second value
        Returns:
        the result
      • mathDivideUnsigned

        public static long mathDivideUnsigned​(long dividend,
                                              long divisor)
        Returns the unsigned quotient of dividing the first argument by the second where each argument and the result is interpreted as an unsigned value.

        When either argument is negative (i.e. a uint64_t value higher than 0x8000_0000_0000_0000L), this method uses bit twiddling to implement the division. The JDK implementation uses BigInteger for this case, which has a negative impact on performance.

        Parameters:
        dividend - the value to be divided
        divisor - the value doing the dividing
        Returns:
        the unsigned quotient of the first argument divided by the second argument
      • mathRemainderUnsigned

        public static long mathRemainderUnsigned​(long dividend,
                                                 long divisor)
        Returns the unsigned remainder from dividing the first argument by the second where each argument and the result is interpreted as an unsigned value.

        When either argument is negative (i.e. a uint64_t value higher than 0x8000_0000_0000_0000L), this method uses bit twiddling to implement the remainder. The JDK implementation uses BigInteger for this case, which has a negative impact on performance.

        Parameters:
        dividend - the value to be divided
        divisor - the value doing the dividing
        Returns:
        the unsigned remainder of the first argument divided by the second argument