Class MathHelper


  • @Immutable
    public final class MathHelper
    extends Object
    Contains several math help routines.
    Author:
    Philip Helger
    • Method Detail

      • getRoundedUp

        public static int getRoundedUp​(int nToRound,
                                       @Nonnegative
                                       int nMultiple)
        Round up to the nearest multiple of the value to round.
        Parameters:
        nToRound - Value to round. May be positive or negative.
        nMultiple - Multiple to use. Must be ≥ 0.
        Returns:
        The rounded value.
      • getDividedDouble

        public static double getDividedDouble​(int nDividend,
                                              int nDivisor)
        Divides the passed int dividend through the passed divisor (nDividend / nDivisor)
        Parameters:
        nDividend - the dividend
        nDivisor - the divisor
        Returns:
        a double representing the exact quotient. Returns Double.NaN if the divisor is 0.
      • getDividedDouble

        public static double getDividedDouble​(long nDividend,
                                              long nDivisor)
        Divides the passed int dividend through the passed divisor (nDividend / nDivisor)
        Parameters:
        nDividend - the dividend
        nDivisor - the divisor
        Returns:
        a double representing the exact quotient. Returns Double.NaN if the divisor is 0.
      • getDividedBigDecimal

        @Nonnull
        public static BigDecimal getDividedBigDecimal​(long nDividend,
                                                      long nDivisor)
        Get the division result using BigDecimal.
        Parameters:
        nDividend - the dividend
        nDivisor - the divisor
        Returns:
        the result of the division
        Throws:
        ArithmeticException - if the divisor is 0.
      • getDividedBigDecimal

        @Nonnull
        public static BigDecimal getDividedBigDecimal​(long nDividend,
                                                      long nDivisor,
                                                      @Nonnegative
                                                      int nScale,
                                                      @Nonnull
                                                      RoundingMode eRoundingMode)
        Get the division result using BigDecimal.
        Parameters:
        nDividend - the dividend
        nDivisor - the divisor
        nScale - Number of fraction digits. Must be ≥ 0.
        eRoundingMode - Round mode to be used. May not be null.
        Returns:
        the result of the division
        Throws:
        ArithmeticException - if the divisor is 0.
        Since:
        v11.0.2
      • getIntDividedCeil

        public static int getIntDividedCeil​(int nDividend,
                                            int nDivisor)
      • getIntDividedFloor

        public static int getIntDividedFloor​(int nDividend,
                                             int nDivisor)
      • getIntDivided

        public static int getIntDivided​(int nDividend,
                                        int nDivisor,
                                        @Nonnull
                                        RoundingMode eRoundingMode)
      • getLongDividedCeil

        public static long getLongDividedCeil​(long nDividend,
                                              long nDivisor)
      • getLongDividedFloor

        public static long getLongDividedFloor​(long nDividend,
                                               long nDivisor)
      • getLongDivided

        public static long getLongDivided​(long nDividend,
                                          long nDivisor,
                                          @Nonnull
                                          RoundingMode eRoundingMode)
      • canConvertLongToInt

        public static boolean canConvertLongToInt​(long nValue)
      • getLongAsInt

        @CheckReturnValue
        public static int getLongAsInt​(long nValue,
                                       int nFallback)
      • getMaxInt

        public static int getMaxInt​(int nValue,
                                    @Nonnull
                                    int... aValues)
      • getMaxLong

        public static long getMaxLong​(long nValue,
                                      @Nonnull
                                      long... aValues)
      • getMaxFloat

        public static double getMaxFloat​(float fValue,
                                         @Nonnull
                                         float... aValues)
      • getMaxDouble

        public static double getMaxDouble​(double dValue,
                                          @Nonnull
                                          double... aValues)
      • getMinInt

        public static int getMinInt​(int nValue,
                                    @Nonnull
                                    int... aValues)
      • getMinLong

        public static long getMinLong​(long nValue,
                                      @Nonnull
                                      long... aValues)
      • getMinFloat

        public static double getMinFloat​(float fValue,
                                         @Nonnull
                                         float... aValues)
      • getMinDouble

        public static double getMinDouble​(double dValue,
                                          @Nonnull
                                          double... aValues)
      • abs

        @Nonnegative
        public static float abs​(float fValue)
        This is a sanity method wrapping Math.abs (float), so that you don't have to think whether you need to invoke the abs method from this class or the one from Math directly.
        Parameters:
        fValue - Input value
        Returns:
        the absolute value of the argument.
      • abs

        @Nonnegative
        public static double abs​(double dValue)
        This is a sanity method wrapping Math.abs (double), so that you don't have to think whether you need to invoke the abs method from this class or the one from Math directly.
        Parameters:
        dValue - Input value
        Returns:
        the absolute value of the argument.
      • abs

        @Nonnull
        public static BigDecimal abs​(@Nonnull
                                     BigDecimal aValue)
        This is a sanity method wrapping BigDecimal.abs (double), so that you don't have to think whether you need to invoke the abs method from this class or the one from BigDecimal directly.
        Parameters:
        aValue - Input value
        Returns:
        the absolute value of the argument.
      • abs

        @Nonnull
        public static BigInteger abs​(@Nonnull
                                     BigInteger aValue)
        This is a sanity method wrapping BigInteger.abs (double), so that you don't have to think whether you need to invoke the abs method from this class or the one from BigInteger directly.
        Parameters:
        aValue - Input value
        Returns:
        the absolute value of the argument.
      • isEQ0

        public static boolean isEQ0​(@Nonnull
                                    BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is = 0.
      • isNE0

        public static boolean isNE0​(@Nonnull
                                    BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is != 0.
      • isLT0

        public static boolean isLT0​(@Nonnull
                                    BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is < 0.
      • isLE0

        public static boolean isLE0​(@Nonnull
                                    BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is ≤ 0.
      • isGT0

        public static boolean isGT0​(@Nonnull
                                    BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is > 0.
      • isGE0

        public static boolean isGE0​(@Nonnull
                                    BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is ≥ 0.
      • isEQ1

        public static boolean isEQ1​(@Nonnull
                                    BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is = 1.
      • isNE1

        public static boolean isNE1​(@Nonnull
                                    BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is != 1.
      • isLT1

        public static boolean isLT1​(@Nonnull
                                    BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is < 1.
      • isLE1

        public static boolean isLE1​(@Nonnull
                                    BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is ≤ 1.
      • isGT1

        public static boolean isGT1​(@Nonnull
                                    BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is > 1.
      • isGE1

        public static boolean isGE1​(@Nonnull
                                    BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is ≥ 1.
      • isEQ10

        public static boolean isEQ10​(@Nonnull
                                     BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is = 10.
      • isNE10

        public static boolean isNE10​(@Nonnull
                                     BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is != 10.
      • isLT10

        public static boolean isLT10​(@Nonnull
                                     BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is < 10.
      • isLE10

        public static boolean isLE10​(@Nonnull
                                     BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is ≤ 10.
      • isGT10

        public static boolean isGT10​(@Nonnull
                                     BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is > 10.
      • isGE10

        public static boolean isGE10​(@Nonnull
                                     BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is ≥ 10.
      • isEQ100

        public static boolean isEQ100​(@Nonnull
                                      BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is = 100.
      • isNE100

        public static boolean isNE100​(@Nonnull
                                      BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is != 100.
      • isLT100

        public static boolean isLT100​(@Nonnull
                                      BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is < 100.
      • isLE100

        public static boolean isLE100​(@Nonnull
                                      BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is ≤ 100.
      • isGT100

        public static boolean isGT100​(@Nonnull
                                      BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is > 100.
      • isGE100

        public static boolean isGE100​(@Nonnull
                                      BigDecimal aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is ≥ 100.
      • isEQ0

        public static boolean isEQ0​(@Nonnull
                                    BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is = 0.
      • isNE0

        public static boolean isNE0​(@Nonnull
                                    BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is != 0.
      • isLT0

        public static boolean isLT0​(@Nonnull
                                    BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is < 0.
      • isLE0

        public static boolean isLE0​(@Nonnull
                                    BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is ≤ 0.
      • isGT0

        public static boolean isGT0​(@Nonnull
                                    BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is > 0.
      • isGE0

        public static boolean isGE0​(@Nonnull
                                    BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is ≥ 0.
      • isEQ1

        public static boolean isEQ1​(@Nonnull
                                    BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is = 1.
      • isNE1

        public static boolean isNE1​(@Nonnull
                                    BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is != 1.
      • isLT1

        public static boolean isLT1​(@Nonnull
                                    BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is < 1.
      • isLE1

        public static boolean isLE1​(@Nonnull
                                    BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is ≤ 1.
      • isGT1

        public static boolean isGT1​(@Nonnull
                                    BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is > 1.
      • isGE1

        public static boolean isGE1​(@Nonnull
                                    BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is ≥ 1.
      • isEQ10

        public static boolean isEQ10​(@Nonnull
                                     BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is = 10.
      • isNE10

        public static boolean isNE10​(@Nonnull
                                     BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is != 10.
      • isLT10

        public static boolean isLT10​(@Nonnull
                                     BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is < 10.
      • isLE10

        public static boolean isLE10​(@Nonnull
                                     BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is ≤ 10.
      • isGT10

        public static boolean isGT10​(@Nonnull
                                     BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is > 10.
      • isGE10

        public static boolean isGE10​(@Nonnull
                                     BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is ≥ 10.
      • isEQ100

        public static boolean isEQ100​(@Nonnull
                                      BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is = 100.
      • isNE100

        public static boolean isNE100​(@Nonnull
                                      BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is != 100.
      • isLT100

        public static boolean isLT100​(@Nonnull
                                      BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is < 100.
      • isLE100

        public static boolean isLE100​(@Nonnull
                                      BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is ≤ 100.
      • isGT100

        public static boolean isGT100​(@Nonnull
                                      BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is > 100.
      • isGE100

        public static boolean isGE100​(@Nonnull
                                      BigInteger aValue)
        Parameters:
        aValue - Value to compare. May not be null.
        Returns:
        true if the value is ≥ 100.
      • getWithoutTrailingZeroes

        @Nullable
        @CheckReturnValue
        public static BigDecimal getWithoutTrailingZeroes​(@Nullable
                                                          String sValue)
        Get the passed String as a BigDecimal without any trailing zeroes.
        Parameters:
        sValue - The String to be used as a BigDecimal to be modified. May be null.
        Returns:
        null if the input value is null.
      • getWithoutTrailingZeroes

        @Nullable
        @CheckReturnValue
        public static BigDecimal getWithoutTrailingZeroes​(@Nullable
                                                          BigDecimal aValue)
        Get the passed BigDecimal without any trailing zeroes. Examples:
        • new BigDecimal ("0.00000000") --> 0
        • new BigDecimal ("10") --> 10
        • new BigDecimal ("10.00000000") --> 10
        • new BigDecimal ("10.1") --> 10.1
        • new BigDecimal ("10.10000000") --> 10.1
        • new BigDecimal ("10.345") --> 10.345
        • new BigDecimal ("10.3450000000") --> 10.345
        Parameters:
        aValue - The BigDecimal to be modified. May be null.
        Returns:
        null if the input value is null.
      • getFractionDigits

        @Nonnegative
        public static int getFractionDigits​(@Nonnull
                                            BigDecimal aBD)
        Get the number of effective fraction digits by the specified BigDecimal. Examples:
        • new BigDecimal ("10") --> 0
        • new BigDecimal ("10.00000000") --> 0
        • new BigDecimal ("10.1") --> 1
        • new BigDecimal ("10.10000000") --> 1
        • new BigDecimal ("10.345") --> 3
        • new BigDecimal ("10.3450000000") --> 3
        Parameters:
        aBD - The BigDecimal to check. May not be null.
        Returns:
        The minimum number of fraction digits. Always ≥ 0.
      • addPercent

        @Nonnull
        public static BigDecimal addPercent​(@Nonnull
                                            BigDecimal aBase,
                                            @Nonnull
                                            BigDecimal aPercentage)
        Add x% to base
        Parameters:
        aBase - Base value. May not be null.
        aPercentage - Percentage value (0-100). May not be null.
        Returns:
        base + x% (=aBase * (100 + perc) / 100). Never null.
      • addPercent

        @Nonnull
        public static BigDecimal addPercent​(@Nonnull
                                            BigDecimal aBase,
                                            @Nonnull
                                            BigDecimal aPercentage,
                                            @Nonnegative
                                            int nScale,
                                            @Nonnull
                                            RoundingMode eRoundingMode)
        Add x% to base
        Parameters:
        aBase - Base value. May not be null.
        aPercentage - Percentage value (0-100). May not be null.
        nScale - Maximum scale to achieve.
        eRoundingMode - Rounding mode to used. May not be null.
        Returns:
        base + x% (=aBase * (100 + perc) / 100). Never null.
      • subtractPercent

        @Nonnull
        public static BigDecimal subtractPercent​(@Nonnull
                                                 BigDecimal aBase,
                                                 @Nonnull
                                                 BigDecimal aPercentage)
        Subtract x% from base
        Parameters:
        aBase - Base value. May not be null.
        aPercentage - Percentage value (0-100). May not be null.
        Returns:
        base - x% (=aBase * (100 - perc) / 100). Never null.
      • subtractPercent

        @Nonnull
        public static BigDecimal subtractPercent​(@Nonnull
                                                 BigDecimal aBase,
                                                 @Nonnull
                                                 BigDecimal aPercentage,
                                                 @Nonnegative
                                                 int nScale,
                                                 @Nonnull
                                                 RoundingMode eRoundingMode)
        Subtract x% from base
        Parameters:
        aBase - Base value. May not be null.
        aPercentage - Percentage value (0-100). May not be null.
        nScale - Maximum scale to achieve.
        eRoundingMode - Rounding mode to used. May not be null.
        Returns:
        base - x% (=aBase * (100 - perc) / 100). Never null.
      • getPercentValue

        @Nonnull
        public static BigDecimal getPercentValue​(@Nonnull
                                                 BigDecimal aBase,
                                                 @Nonnull
                                                 BigDecimal aPercentage)
        Get x% from base
        Parameters:
        aBase - Base value. May not be null.
        aPercentage - Percentage value (0-100). May not be null.
        Returns:
        x% from base (=aBase * perc / 100). Never null.
      • getPercentValue

        @Nonnull
        public static BigDecimal getPercentValue​(@Nonnull
                                                 BigDecimal aBase,
                                                 @Nonnull
                                                 BigDecimal aPercentage,
                                                 @Nonnegative
                                                 int nScale,
                                                 @Nonnull
                                                 RoundingMode eRoundingMode)
        Get x% from base with rounding etc.
        Parameters:
        aBase - Base value. May not be null.
        aPercentage - Percentage value (0-100). May not be null.
        nScale - Maximum scale to achieve.
        eRoundingMode - Rounding mode to used. May not be null.
        Returns:
        x% from base (=aBase * perc / 100). Never null.
      • hypot

        public static double hypot​(double a,
                                   double b)
        Parameters:
        a - a
        b - b
        Returns:
        sqrt(a*a + b*b) without under/overflow.
      • getUnsignedInt

        public static long getUnsignedInt​(int n)
        Converts the passed signed integer to an unsigned long
        Parameters:
        n - Source int
        Returns:
        The unsigned long
      • isExactlyOneBitSetToOne

        public static boolean isExactlyOneBitSetToOne​(int n)
        Check if only a single bit is set.
        Source: http://stackoverflow.com/questions/12483843/test-if-a-bitboard-have-only-one-bit-set-to-1
        Say n has any bits set, the least significant is bit number k. Then n-1 has the same bits as n for indices above k, a 0-bit in place k and 1-bits in the less significant places, so the bitwise and removes the least significant set bit from n. If n had only one bit set, the result becomes 0, if n had more bits set, the result is nonzero.
        Parameters:
        n - Source number
        Returns:
        true if exactly one bit is set
      • isExactlyOneBitSetToOne

        public static boolean isExactlyOneBitSetToOne​(long n)
        Check if only a single bit is set.
        Source: http://stackoverflow.com/questions/12483843/test-if-a-bitboard-have-only-one-bit-set-to-1
        Say n has any bits set, the least significant is bit number k. Then n-1 has the same bits as n for indices above k, a 0-bit in place k and 1-bits in the less significant places, so the bitwise and removes the least significant set bit from n. If n had only one bit set, the result becomes 0, if n had more bits set, the result is nonzero.
        Parameters:
        n - Source number
        Returns:
        true if exactly one bit is set