Package org.apfloat

Class ApfloatMath


  • public class ApfloatMath
    extends java.lang.Object
    Various mathematical functions for arbitrary precision floating-point numbers.

    Due to different types of round-off errors that can occur in the implementation, no guarantees about e.g. monotonicity are given for any of the methods.

    Version:
    1.14.0
    See Also:
    ApintMath
    • Field Detail

      • SHUTDOWN_MAP

        private static final java.util.Map<java.lang.Integer,​Apfloat> SHUTDOWN_MAP
      • radixPiKeys

        private static java.util.concurrent.ConcurrentMap<java.lang.Integer,​java.lang.Object> radixPiKeys
      • radixPi

        private static java.util.Map<java.lang.Integer,​Apfloat> radixPi
      • radixPiT

        private static java.util.Map<java.lang.Integer,​Apfloat> radixPiT
      • radixPiQ

        private static java.util.Map<java.lang.Integer,​Apfloat> radixPiQ
      • radixPiP

        private static java.util.Map<java.lang.Integer,​Apfloat> radixPiP
      • radixPiInverseRoot

        private static java.util.Map<java.lang.Integer,​Apfloat> radixPiInverseRoot
      • radixPiTerms

        private static java.util.Map<java.lang.Integer,​java.lang.Long> radixPiTerms
      • radixLogKeys

        private static java.util.concurrent.ConcurrentMap<java.lang.Integer,​java.lang.Object> radixLogKeys
      • radixLog

        private static java.util.Map<java.lang.Integer,​Apfloat> radixLog
      • radixLogPi

        private static java.util.Map<java.lang.Integer,​Apfloat> radixLogPi
      • radixGaussianKeys

        private static java.util.concurrent.ConcurrentMap<java.lang.Integer,​java.lang.Object> radixGaussianKeys
      • nextGaussian

        private static java.util.Map<java.lang.Integer,​Apfloat> nextGaussian
      • nextGaussianPrecision

        private static java.util.Map<java.lang.Integer,​java.lang.Long> nextGaussianPrecision
    • Constructor Detail

      • ApfloatMath

        private ApfloatMath()
    • Method Detail

      • pow

        public static Apfloat pow​(Apfloat x,
                                  long n)
                           throws java.lang.ArithmeticException,
                                  ApfloatRuntimeException
        Integer power.
        Parameters:
        x - Base of the power operator.
        n - Exponent of the power operator.
        Returns:
        x to the n:th power, that is xn.
        Throws:
        java.lang.ArithmeticException - If both x and n are zero.
        ApfloatRuntimeException
      • root

        public static Apfloat root​(Apfloat x,
                                   long n)
                            throws java.lang.ArithmeticException,
                                   ApfloatRuntimeException
        Positive integer root.
        Parameters:
        x - The argument.
        n - Which root to take.
        Returns:
        n:th root of x, that is x1/n.
        Throws:
        java.lang.ArithmeticException - If n is zero, or x is negative and n is even.
        ApfloatRuntimeException
      • inverseRoot

        public static Apfloat inverseRoot​(Apfloat x,
                                          long n)
                                   throws java.lang.ArithmeticException,
                                          ApfloatRuntimeException
        Inverse positive integer root.
        Parameters:
        x - The argument.
        n - Which inverse root to take.
        Returns:
        Inverse n:th root of x, that is x-1/n.
        Throws:
        java.lang.ArithmeticException - If x or n is zero, or x is negative and n is even.
        ApfloatRuntimeException
      • inverseRoot

        public static Apfloat inverseRoot​(Apfloat x,
                                          long n,
                                          long targetPrecision)
                                   throws java.lang.IllegalArgumentException,
                                          java.lang.ArithmeticException,
                                          ApfloatRuntimeException
        Inverse positive integer root.
        Parameters:
        x - The argument.
        n - Which inverse root to take.
        targetPrecision - Precision of the desired result.
        Returns:
        Inverse n:th root of x, that is x-1/n.
        Throws:
        java.lang.IllegalArgumentException - If targetPrecision <= 0.
        java.lang.ArithmeticException - If x or n is zero, or x is negative and n is even.
        ApfloatRuntimeException
      • inverseRoot

        public static Apfloat inverseRoot​(Apfloat x,
                                          long n,
                                          long targetPrecision,
                                          Apfloat initialGuess)
                                   throws java.lang.IllegalArgumentException,
                                          java.lang.ArithmeticException,
                                          ApfloatRuntimeException
        Inverse positive integer root.
        Parameters:
        x - The argument.
        n - Which inverse root to take.
        targetPrecision - Precision of the desired result.
        initialGuess - Initial guess for the result value, or null if none is available.
        Returns:
        Inverse n:th root of x, that is x-1/n.
        Throws:
        java.lang.IllegalArgumentException - If targetPrecision <= 0.
        java.lang.ArithmeticException - If x or n is zero, or x is negative and n is even.
        ApfloatRuntimeException
      • inverseRoot

        public static Apfloat inverseRoot​(Apfloat x,
                                          long n,
                                          long targetPrecision,
                                          Apfloat initialGuess,
                                          long initialPrecision)
                                   throws java.lang.IllegalArgumentException,
                                          java.lang.ArithmeticException,
                                          ApfloatRuntimeException
        Inverse positive integer root.

        This method is the basis for most of apfloat's non-elementary operations. It is used e.g. in Apfloat.divide(Apfloat), sqrt(Apfloat) and root(Apfloat,long).

        Parameters:
        x - The argument.
        n - Which inverse root to take.
        targetPrecision - Precision of the desired result.
        initialGuess - Initial guess for the result value, or null if none is available.
        initialPrecision - Precision of the initial guess, if available.
        Returns:
        Inverse n:th root of x, that is x-1/n.
        Throws:
        java.lang.IllegalArgumentException - If targetPrecision <= 0 or initialPrecision <= 0.
        java.lang.ArithmeticException - If x or n is zero, or x is negative and n is even.
        ApfloatRuntimeException
      • floor

        public static Apint floor​(Apfloat x)
                           throws ApfloatRuntimeException
        Floor function. Returns the largest (closest to positive infinity) value that is not greater than the argument and is equal to a mathematical integer.
        Parameters:
        x - The argument.
        Returns:
        x rounded towards negative infinity.
        Throws:
        ApfloatRuntimeException
      • ceil

        public static Apint ceil​(Apfloat x)
                          throws ApfloatRuntimeException
        Ceiling function. Returns the smallest (closest to negative infinity) value that is not less than the argument and is equal to a mathematical integer.
        Parameters:
        x - The argument.
        Returns:
        x rounded towards positive infinity.
        Throws:
        ApfloatRuntimeException
      • round

        @Deprecated
        public static Apfloat round​(Apfloat x,
                                    long precision,
                                    java.math.RoundingMode roundingMode)
                             throws java.lang.IllegalArgumentException,
                                    java.lang.ArithmeticException,
                                    ApfloatRuntimeException
        Rounds the given number to the specified precision with the specified rounding mode.
        Parameters:
        x - The number to round.
        precision - The precision to round to.
        roundingMode - The rounding mode to use.
        Returns:
        The rounded number.
        Throws:
        java.lang.IllegalArgumentException - If precision is less than zero or zero.
        java.lang.ArithmeticException - If rounding is necessary (result is not exact) and rounding mode is RoundingMode.UNNECESSARY.
        ApfloatRuntimeException
        Since:
        1.7.0
      • roundToPrecision

        public static Apfloat roundToPrecision​(Apfloat x,
                                               long precision,
                                               java.math.RoundingMode roundingMode)
                                        throws java.lang.IllegalArgumentException,
                                               java.lang.ArithmeticException,
                                               ApfloatRuntimeException
        Rounds the given number to the specified precision with the specified rounding mode.
        Parameters:
        x - The number to round.
        precision - The precision to round to.
        roundingMode - The rounding mode to use.
        Returns:
        The rounded number.
        Throws:
        java.lang.IllegalArgumentException - If precision is less than zero or zero.
        java.lang.ArithmeticException - If rounding is necessary (result is not exact) and rounding mode is RoundingMode.UNNECESSARY.
        ApfloatRuntimeException
        Since:
        1.11.0
      • roundToInteger

        public static Apint roundToInteger​(Apfloat x,
                                           java.math.RoundingMode roundingMode)
                                    throws java.lang.IllegalArgumentException,
                                           java.lang.ArithmeticException,
                                           ApfloatRuntimeException
        Rounds x to integer using the specified rounding mode.
        Parameters:
        x - The number to round.
        roundingMode - The rounding mode to use.
        Returns:
        The rounded number.
        Throws:
        java.lang.ArithmeticException - If rounding is necessary (result is not exact) and rounding mode is RoundingMode.UNNECESSARY.
        java.lang.IllegalArgumentException
        ApfloatRuntimeException
        Since:
        1.11.0
      • roundToPlaces

        public static Apfloat roundToPlaces​(Apfloat x,
                                            long places,
                                            java.math.RoundingMode roundingMode)
                                     throws java.lang.IllegalArgumentException,
                                            java.lang.ArithmeticException,
                                            ApfloatRuntimeException
        Rounds x to the specified number of places using the specified rounding mode.
        Parameters:
        x - The number to round.
        places - The number of places to round to (in base 10, the number of decimal places).
        roundingMode - The rounding mode to use.
        Returns:
        The rounded number.
        Throws:
        java.lang.ArithmeticException - If rounding is necessary (result is not exact) and rounding mode is RoundingMode.UNNECESSARY.
        java.lang.IllegalArgumentException
        ApfloatRuntimeException
        Since:
        1.11.0
      • roundToMultiple

        public static Apfloat roundToMultiple​(Apfloat x,
                                              Apfloat y,
                                              java.math.RoundingMode roundingMode)
                                       throws java.lang.IllegalArgumentException,
                                              java.lang.ArithmeticException,
                                              ApfloatRuntimeException
        Rounds x to the nearest multiple of y using the specified rounding mode.
        Parameters:
        x - The number to round.
        y - The integer multiple to round to.
        roundingMode - The rounding mode to use.
        Returns:
        The rounded number.
        Throws:
        java.lang.ArithmeticException - If rounding is necessary (result is not exact) and rounding mode is RoundingMode.UNNECESSARY.
        java.lang.IllegalArgumentException
        ApfloatRuntimeException
        Since:
        1.11.0
      • copySign

        public static Apfloat copySign​(Apfloat x,
                                       Apfloat y)
                                throws ApfloatRuntimeException
        Copy sign from one argument to another.
        Parameters:
        x - The value whose sign is to be adjusted.
        y - The value whose sign is to be used.
        Returns:
        x with its sign changed to match the sign of y.
        Throws:
        ApfloatRuntimeException
        Since:
        1.1
      • modf

        public static Apfloat[] modf​(Apfloat x)
                              throws ApfloatRuntimeException
        Split to integer and fractional parts. The integer part is simply i = floor(x). For the fractional part f the following is always true:

        0 <= f < 1

        Parameters:
        x - The argument.
        Returns:
        An array of two apfloats, [i, f], the first being the integer part and the last being the fractional part.
        Throws:
        ApfloatRuntimeException
      • fmod

        public static Apfloat fmod​(Apfloat x,
                                   Apfloat y)
                            throws ApfloatRuntimeException
        Returns x modulo y.

        This function calculates the remainder f of x / y such that x = i * y + f, where i is an integer, f has the same sign as x, and the absolute value of f is less than the absolute value of y.

        If y is zero, then zero is returned.

        Parameters:
        x - The dividend.
        y - The divisor.
        Returns:
        The remainder when x is divided by y.
        Throws:
        ApfloatRuntimeException
      • multiplyAdd

        public static Apfloat multiplyAdd​(Apfloat a,
                                          Apfloat b,
                                          Apfloat c,
                                          Apfloat d)
                                   throws ApfloatRuntimeException
        Fused multiply-add. Calculates a * b + c * d so that the precision used in the multiplications is only what is needed for the end result. Performance can this way be better than by calculating a.multiply(b).add(c.multiply(d)).
        Parameters:
        a - First argument.
        b - Second argument.
        c - Third argument.
        d - Fourth argument.
        Returns:
        a * b + c * d.
        Throws:
        ApfloatRuntimeException
      • multiplySubtract

        public static Apfloat multiplySubtract​(Apfloat a,
                                               Apfloat b,
                                               Apfloat c,
                                               Apfloat d)
                                        throws ApfloatRuntimeException
        Fused multiply-subtract. Calculates a * b - c * d so that the precision used in the multiplications is only what is needed for the end result. Performance can this way be better than by calculating a.multiply(b).subtract(c.multiply(d)).
        Parameters:
        a - First argument.
        b - Second argument.
        c - Third argument.
        d - Fourth argument.
        Returns:
        a * b - c * d.
        Throws:
        ApfloatRuntimeException
      • agmConsume

        private static Apfloat agmConsume​(java.util.function.Consumer<Apfloat> consumer,
                                          Apfloat a,
                                          Apfloat c2,
                                          long workingPrecision)
      • pi

        public static Apfloat pi​(long precision)
                          throws java.lang.IllegalArgumentException,
                                 java.lang.NumberFormatException,
                                 ApfloatRuntimeException
        Calculates π. Uses default radix.
        Parameters:
        precision - Number of digits of π to calculate.
        Returns:
        π accurate to precision digits, in the default radix.
        Throws:
        java.lang.NumberFormatException - If the default radix is not valid.
        java.lang.IllegalArgumentException - In case the precision is invalid.
        ApfloatRuntimeException
      • pi

        public static Apfloat pi​(long precision,
                                 int radix)
                          throws java.lang.IllegalArgumentException,
                                 java.lang.NumberFormatException,
                                 ApfloatRuntimeException
        Calculates π.
        Parameters:
        precision - Number of digits of π to calculate.
        radix - The radix in which the number should be presented.
        Returns:
        π accurate to precision digits, in base radix.
        Throws:
        java.lang.NumberFormatException - If the radix is not valid.
        java.lang.IllegalArgumentException - In case the precision is invalid.
        ApfloatRuntimeException
      • log

        public static Apfloat log​(Apfloat x)
                           throws java.lang.ArithmeticException,
                                  ApfloatRuntimeException
        Natural logarithm.

        The logarithm is calculated using the arithmetic-geometric mean. See the Borweins' book for the formula.

        Parameters:
        x - The argument.
        Returns:
        Natural logarithm of x.
        Throws:
        java.lang.ArithmeticException - If x <= 0.
        ApfloatRuntimeException
      • log

        public static Apfloat log​(Apfloat x,
                                  Apfloat b)
                           throws java.lang.ArithmeticException,
                                  ApfloatRuntimeException
        Logarithm in arbitrary base.

        The logarithm is calculated using the arithmetic-geometric mean. See the Borweins' book for the formula.

        Parameters:
        x - The argument.
        b - The base.
        Returns:
        Base-b logarithm of x.
        Throws:
        java.lang.ArithmeticException - If x <= 0 or b <= 0.
        ApfloatRuntimeException
        Since:
        1.6
      • logRadix

        public static Apfloat logRadix​(long precision,
                                       int radix)
                                throws ApfloatRuntimeException
        Gets or calculates logarithm of a radix to required precision. The calculated value is stored in a cache for later usage.
        Parameters:
        precision - The needed precision.
        radix - The radix.
        Returns:
        Natural logarithm of radix to the specified precision.
        Throws:
        java.lang.NumberFormatException - If the radix is invalid.
        ApfloatRuntimeException
      • pow

        public static Apfloat pow​(Apfloat x,
                                  Apfloat y)
                           throws java.lang.ArithmeticException,
                                  ApfloatRuntimeException
        Arbitrary power. Calculated using log() and exp().
        Parameters:
        x - The base.
        y - The exponent.
        Returns:
        xy.
        Throws:
        java.lang.ArithmeticException - If both x and y are zero, or x is negative and y is not an integer.
        ApfloatRuntimeException
      • acosh

        public static Apfloat acosh​(Apfloat x)
                             throws java.lang.ArithmeticException,
                                    ApfloatRuntimeException
        Inverse hyperbolic cosine. Calculated using log().
        Parameters:
        x - The argument.
        Returns:
        Inverse hyperbolic cosine of x.
        Throws:
        java.lang.ArithmeticException - If x < 1.
        ApfloatRuntimeException
      • atanh

        public static Apfloat atanh​(Apfloat x)
                             throws java.lang.ArithmeticException,
                                    ApfloatRuntimeException
        Inverse hyperbolic tangent. Calculated using log().
        Parameters:
        x - The argument.
        Returns:
        Inverse hyperbolic tangent of x.
        Throws:
        java.lang.ArithmeticException - If abs(x) >= 1.
        ApfloatRuntimeException
      • acos

        public static Apfloat acos​(Apfloat x)
                            throws java.lang.ArithmeticException,
                                   ApfloatRuntimeException
        Inverse cosine. Calculated using complex functions.
        Parameters:
        x - The argument.
        Returns:
        Inverse cosine of x.
        Throws:
        java.lang.ArithmeticException - If abs(x) > 1.
        ApfloatRuntimeException
      • halfPi

        static Apfloat halfPi​(int radix,
                              long precision)
      • atan2

        public static Apfloat atan2​(Apfloat y,
                                    Apfloat x)
                             throws java.lang.ArithmeticException,
                                    ApfloatRuntimeException
        Converts cartesian coordinates to polar coordinates. Calculated using complex functions.

        Computes the phase angle by computing an arc tangent of y/x in the range of -π < angle <= π.

        Parameters:
        y - The argument.
        x - The argument.
        Returns:
        The angle of the point (x, y) in the plane.
        Throws:
        java.lang.ArithmeticException - If y and x are both zero.
        ApfloatRuntimeException
      • tan

        public static Apfloat tan​(Apfloat x)
                           throws java.lang.ArithmeticException,
                                  ApfloatRuntimeException
        Tangent. Calculated using complex functions.
        Parameters:
        x - The argument (in radians).
        Returns:
        Tangent of x.
        Throws:
        java.lang.ArithmeticException - If x is π/2 + n π where n is an integer.
        ApfloatRuntimeException
      • w

        public static Apfloat w​(Apfloat x)
                         throws java.lang.ArithmeticException,
                                ApfloatRuntimeException
        Lambert W function. The W function gives the solution to the equation W eW = x. Also known as the product logarithm.

        This function only gives the solution to the principal branch, W0. For the real-valued W-1 branch, use ApcomplexMath.w(Apcomplex,long).

        Parameters:
        x - The argument.
        Returns:
        W0(x).
        Throws:
        java.lang.ArithmeticException - If x is less than -1/e.
        ApfloatRuntimeException
        Since:
        1.8.0
      • product

        public static Apfloat product​(Apfloat... x)
                               throws ApfloatRuntimeException
        Product of numbers. The precision used in the multiplications is only what is needed for the end result. This method may perform significantly better than simply multiplying the numbers sequentially.

        If there are no arguments, the return value is 1.

        Parameters:
        x - The argument(s).
        Returns:
        The product of the given numbers.
        Throws:
        ApfloatRuntimeException
        Since:
        1.3
      • sum

        public static Apfloat sum​(Apfloat... x)
                           throws ApfloatRuntimeException
        Sum of numbers. The precision used in the additions is only what is needed for the end result. This method may perform significantly better than simply adding the numbers sequentially.

        If there are no arguments, the return value is 0.

        Parameters:
        x - The argument(s).
        Returns:
        The sum of the given numbers.
        Throws:
        ApfloatRuntimeException
        Since:
        1.3
      • e

        public static Apfloat e​(long precision)
                         throws java.lang.IllegalArgumentException,
                                java.lang.NumberFormatException,
                                ApfloatRuntimeException
        Calculates e. Uses default radix.
        Parameters:
        precision - Number of digits of e to calculate.
        Returns:
        e accurate to precision digits, in the default radix.
        Throws:
        java.lang.NumberFormatException - If the default radix is not valid.
        java.lang.IllegalArgumentException - In case the precision is invalid.
        ApfloatRuntimeException
        Since:
        1.11.0
      • e

        public static Apfloat e​(long precision,
                                int radix)
                         throws java.lang.IllegalArgumentException,
                                java.lang.NumberFormatException,
                                ApfloatRuntimeException
        Calculates e.
        Parameters:
        precision - Number of digits of e to calculate.
        radix - The radix in which the number should be presented.
        Returns:
        e accurate to precision digits, in base radix.
        Throws:
        java.lang.NumberFormatException - If the radix is not valid.
        java.lang.IllegalArgumentException - In case the precision is invalid.
        ApfloatRuntimeException
        Since:
        1.11.0
      • inverseFactorial

        private static long inverseFactorial​(long precision,
                                             int radix)
      • e

        private static Apfloat[] e​(long start,
                                   long end,
                                   long precision,
                                   int radix)
      • euler

        public static Apfloat euler​(long precision)
                             throws java.lang.IllegalArgumentException,
                                    java.lang.NumberFormatException,
                                    ApfloatRuntimeException
        Calculates γ, the Euler-Mascheroni constant. Uses default radix.
        Parameters:
        precision - Number of digits of γ to calculate.
        Returns:
        γ accurate to precision digits, in the default radix.
        Throws:
        java.lang.NumberFormatException - If the default radix is not valid.
        java.lang.IllegalArgumentException - In case the precision is invalid.
        ApfloatRuntimeException
        Since:
        1.10.0
      • euler

        public static Apfloat euler​(long precision,
                                    int radix)
                             throws java.lang.IllegalArgumentException,
                                    java.lang.NumberFormatException,
                                    ApfloatRuntimeException
        Calculates γ, the Euler-Mascheroni constant.
        Parameters:
        precision - Number of digits of γ to calculate.
        radix - The radix in which the number should be presented.
        Returns:
        γ accurate to precision digits, in base radix.
        Throws:
        java.lang.NumberFormatException - If the radix is not valid.
        java.lang.IllegalArgumentException - In case the precision is invalid.
        ApfloatRuntimeException
        Since:
        1.10.0
      • eulerSmall

        static Apfloat eulerSmall​(long precision,
                                  int radix)
                           throws java.lang.IllegalArgumentException,
                                  java.lang.NumberFormatException,
                                  ApfloatRuntimeException
        Throws:
        java.lang.IllegalArgumentException
        java.lang.NumberFormatException
        ApfloatRuntimeException
      • catalan

        public static Apfloat catalan​(long precision)
                               throws java.lang.IllegalArgumentException,
                                      java.lang.NumberFormatException,
                                      ApfloatRuntimeException
        Calculates Catalan's constant, G. Uses the default radix.

        Parameters:
        precision - Number of digits of G to calculate.
        Returns:
        G accurate to precision digits, in the default radix.
        Throws:
        java.lang.NumberFormatException - If the default radix is not valid.
        java.lang.IllegalArgumentException - In case the precision is invalid.
        ApfloatRuntimeException
        Since:
        1.11.0
      • catalan

        public static Apfloat catalan​(long precision,
                                      int radix)
                               throws java.lang.IllegalArgumentException,
                                      java.lang.NumberFormatException,
                                      ApfloatRuntimeException
        Calculates Catalan's constant, G. Uses the specified radix.

        Parameters:
        precision - Number of digits of G to calculate.
        radix - The radix in which the number should be presented.
        Returns:
        G accurate to precision digits, in base radix.
        Throws:
        java.lang.NumberFormatException - If the radix is not valid.
        java.lang.IllegalArgumentException - In case the precision is invalid.
        ApfloatRuntimeException
        Since:
        1.11.0
      • glaisher

        public static Apfloat glaisher​(long precision)
                                throws java.lang.IllegalArgumentException,
                                       java.lang.NumberFormatException,
                                       ApfloatRuntimeException
        Calculates the Glaisher‐Kinkelin constant, A. Uses the default radix.

        Parameters:
        precision - Number of digits of A to calculate.
        Returns:
        A accurate to precision digits, in the default radix.
        Throws:
        java.lang.NumberFormatException - If the default radix is not valid.
        java.lang.IllegalArgumentException - In case the precision is invalid.
        ApfloatRuntimeException
        Since:
        1.11.0
      • glaisher

        public static Apfloat glaisher​(long precision,
                                       int radix)
                                throws java.lang.IllegalArgumentException,
                                       java.lang.NumberFormatException,
                                       ApfloatRuntimeException
        Calculates the Glaisher‐Kinkelin constant, A. Uses the specified radix.

        Parameters:
        precision - Number of digits of A to calculate.
        radix - The radix in which the number should be presented.
        Returns:
        A accurate to precision digits, in base radix.
        Throws:
        java.lang.NumberFormatException - If the radix is not valid.
        java.lang.IllegalArgumentException - In case the precision is invalid.
        ApfloatRuntimeException
        Since:
        1.11.0
      • khinchin

        public static Apfloat khinchin​(long precision)
                                throws java.lang.IllegalArgumentException,
                                       java.lang.NumberFormatException,
                                       ApfloatRuntimeException
        Calculates Khinchin's constant, K.Uses the default radix.

        Parameters:
        precision - Number of digits of K to calculate.
        Returns:
        K accurate to precision digits, in the default radix.
        Throws:
        java.lang.NumberFormatException - If the default radix is not valid.
        java.lang.IllegalArgumentException - In case the precision is invalid.
        ApfloatRuntimeException
        Since:
        1.11.0
      • khinchin

        public static Apfloat khinchin​(long precision,
                                       int radix)
                                throws java.lang.IllegalArgumentException,
                                       java.lang.NumberFormatException,
                                       ApfloatRuntimeException
        Calculates Khinchin's constant, K. Uses the specified radix.

        Parameters:
        precision - Number of digits of K to calculate.
        radix - The radix in which the number should be presented.
        Returns:
        K accurate to precision digits, in base radix.
        Throws:
        java.lang.NumberFormatException - If the radix is not valid.
        java.lang.IllegalArgumentException - In case the precision is invalid.
        ApfloatRuntimeException
        Since:
        1.11.0
      • gamma

        public static Apfloat gamma​(Apfloat a,
                                    Apfloat x)
                             throws java.lang.ArithmeticException,
                                    ApfloatRuntimeException
        Incomplete gamma function.

        Parameters:
        a - The first argument.
        x - The second argument.
        Returns:
        Γ(a, x)
        Throws:
        java.lang.ArithmeticException - If a is not a positive integer and x is nonpositive.
        ApfloatRuntimeException
        Since:
        1.10.0
      • gamma

        public static Apfloat gamma​(Apfloat a,
                                    Apfloat x0,
                                    Apfloat x1)
                             throws java.lang.ArithmeticException,
                                    ApfloatRuntimeException
        Generalized incomplete gamma function.

        This function is defined as: Γ(a, x0, x1) = Γ(a, x0) - Γ(a, x1)

        The lower gamma function can be calculated with: γ(a, x) = Γ(a, 0, x)

        Parameters:
        a - The first argument.
        x0 - The second argument.
        x1 - The third argument.
        Returns:
        Γ(a, x0, x1)
        Throws:
        java.lang.ArithmeticException - If a is not a positive integer and either x0 or x1 is nonpositive.
        ApfloatRuntimeException
        Since:
        1.10.0
      • logGamma

        public static Apfloat logGamma​(Apfloat x)
                                throws java.lang.ArithmeticException,
                                       ApfloatRuntimeException
        Logarithm of the gamma function.

        Parameters:
        x - The argument.
        Returns:
        logΓ(x)
        Throws:
        java.lang.ArithmeticException - If x is nonpositive.
        ApfloatRuntimeException
        Since:
        1.11.0
      • polygamma

        public static Apfloat polygamma​(long n,
                                        Apfloat x)
                                 throws java.lang.ArithmeticException,
                                        ApfloatRuntimeException
        Polygamma function.

        Parameters:
        n - The order.
        x - The argument.
        Returns:
        ψ(n)(x)
        Throws:
        java.lang.ArithmeticException - If n is negative or x is a nonpositive integer.
        ApfloatRuntimeException
        Since:
        1.13.0
      • beta

        public static Apfloat beta​(Apfloat a,
                                   Apfloat b)
                            throws java.lang.ArithmeticException,
                                   ApfloatRuntimeException
        Beta function.

        Parameters:
        a - The first argument.
        b - The second argument.
        Returns:
        B(a, b)
        Throws:
        java.lang.ArithmeticException - If a or b is a nonpositive integer but a + b is not. Also if both a and b are nonpositive integers.
        ApfloatRuntimeException
        Since:
        1.13.0
      • beta

        public static Apfloat beta​(Apfloat x,
                                   Apfloat a,
                                   Apfloat b)
                            throws java.lang.ArithmeticException,
                                   ApfloatRuntimeException
        Incomplete beta function.

        Parameters:
        x - The first argument.
        a - The second argument.
        b - The third argument.
        Returns:
        Bx(a, b)
        Throws:
        java.lang.ArithmeticException - If a is a nonpositive integer or x is zero and a is nonpositive or x is negative and a is not an integer. Also if x > 1 and the result is not a polynomial.
        ApfloatRuntimeException
        Since:
        1.13.0
      • beta

        public static Apfloat beta​(Apfloat x1,
                                   Apfloat x2,
                                   Apfloat a,
                                   Apfloat b)
                            throws java.lang.ArithmeticException,
                                   ApfloatRuntimeException
        Generalized incomplete beta function.

        Parameters:
        x1 - The first argument.
        x2 - The second argument.
        a - The third argument.
        b - The fourth argument.
        Returns:
        B(x1, x2)(a, b)
        Throws:
        java.lang.ArithmeticException - If a is a nonpositive integer or x1 or x2 is zero and a is nonpositive or x1 or x2 is negative and a is not an integer. Also if x1 > 1 or x2 > 1 and the result is not a polynomial.
        ApfloatRuntimeException
        Since:
        1.13.0
      • pochhammer

        public static Apfloat pochhammer​(Apfloat x,
                                         Apfloat n)
                                  throws java.lang.ArithmeticException,
                                         ApfloatRuntimeException
        Pochhammer symbol.

        Parameters:
        x - The first argument.
        n - The second argument.
        Returns:
        (x)n
        Throws:
        java.lang.ArithmeticException - If x + n is a nonpositive integer but x is not.
        ApfloatRuntimeException
        Since:
        1.13.0
      • zeta

        public static Apfloat zeta​(Apfloat s,
                                   Apfloat a)
                            throws java.lang.ArithmeticException,
                                   ApfloatRuntimeException
        Hurwitz zeta function.

        Parameters:
        s - The first argument.
        a - The second argument.
        Returns:
        ζ(s, a)
        Throws:
        java.lang.ArithmeticException - If s is 1 or if a is a nonpositive integer or if s is not an integer and a is nonpositive.
        ApfloatRuntimeException
        Since:
        1.11.0
      • hypergeometric0F1

        public static Apfloat hypergeometric0F1​(Apfloat a,
                                                Apfloat x)
                                         throws java.lang.ArithmeticException,
                                                ApfloatRuntimeException
        Confluent hypergeometric function 0F1.

        Parameters:
        a - The first argument.
        x - The second argument.
        Returns:
        0F1(; a; x)
        Throws:
        java.lang.ArithmeticException - If the function value is not finite.
        ApfloatRuntimeException
        Since:
        1.11.0
      • hypergeometric1F1

        public static Apfloat hypergeometric1F1​(Apfloat a,
                                                Apfloat b,
                                                Apfloat x)
                                         throws java.lang.ArithmeticException,
                                                ApfloatRuntimeException
        Kummer confluent hypergeometric function 1F1. Also known as the confluent hypergeometric function of the first kind.

        Parameters:
        a - The first argument.
        b - The second argument.
        x - The third argument.
        Returns:
        1F1(a; b; x)
        Throws:
        java.lang.ArithmeticException - If the function value is not finite.
        ApfloatRuntimeException
        Since:
        1.11.0
      • hypergeometric1F1Regularized

        public static Apfloat hypergeometric1F1Regularized​(Apfloat a,
                                                           Apfloat b,
                                                           Apfloat x)
                                                    throws ApfloatRuntimeException
        Regularized Kummer confluent hypergeometric function 11. Also known as the regularized confluent hypergeometric function of the first kind.

        Parameters:
        a - The first argument.
        b - The second argument.
        x - The third argument.
        Returns:
        11(a; b; x)
        Throws:
        ApfloatRuntimeException
        Since:
        1.13.0
      • hypergeometric2F1

        public static Apfloat hypergeometric2F1​(Apfloat a,
                                                Apfloat b,
                                                Apfloat c,
                                                Apfloat x)
                                         throws java.lang.ArithmeticException,
                                                ApfloatRuntimeException
        Hypergeometric function 2F1. Also known as the Gaussian or ordinary hypergeometric function.

        Parameters:
        a - The first argument.
        b - The second argument.
        c - The third argument.
        x - The fourth argument.
        Returns:
        2F1(a, b; c; x)
        Throws:
        java.lang.ArithmeticException - If the function value is not finite or real.
        ApfloatRuntimeException
        Since:
        1.11.0
      • hypergeometric2F1Regularized

        public static Apfloat hypergeometric2F1Regularized​(Apfloat a,
                                                           Apfloat b,
                                                           Apfloat c,
                                                           Apfloat x)
                                                    throws ApfloatRuntimeException
        Regularized hypergeometric function 21. Also known as the regularized Gaussian or ordinary hypergeometric function.

        Parameters:
        a - The first argument.
        b - The second argument.
        c - The third argument.
        x - The fourth argument.
        Returns:
        21(a, b; c; x)
        Throws:
        ApfloatRuntimeException
        Since:
        1.13.0
      • hypergeometricU

        public static Apfloat hypergeometricU​(Apfloat a,
                                              Apfloat b,
                                              Apfloat x)
                                       throws java.lang.ArithmeticException,
                                              ApfloatRuntimeException
        Tricomi's confluent hypergeometric function U. Also known as the confluent hypergeometric function of the second kind.

        Parameters:
        a - The first argument.
        b - The second argument.
        x - The third argument.
        Returns:
        U(a, b, x)
        Throws:
        java.lang.ArithmeticException - If the result would be complex or not finite.
        ApfloatRuntimeException
        Since:
        1.13.0
      • inverseErfc

        public static Apfloat inverseErfc​(Apfloat x)
                                   throws java.lang.ArithmeticException,
                                          ApfloatRuntimeException
        Inverse complementary error function.

        Parameters:
        x - The argument.
        Returns:
        erfc−1(x)
        Throws:
        java.lang.ArithmeticException - If x is ≤ 0 or ≥ 2.
        ApfloatRuntimeException
        Since:
        1.13.0
      • expIntegralE

        public static Apfloat expIntegralE​(Apfloat ν,
                                           Apfloat x)
                                    throws java.lang.ArithmeticException,
                                           ApfloatRuntimeException
        Exponential integral E.

        Parameters:
        \u03bd - The first argument.
        x - The second argument.
        Returns:
        Eν(x)
        Throws:
        java.lang.ArithmeticException - If ν is < 0 and x is zero or ν is nonzero and x is negative.
        ApfloatRuntimeException
        Since:
        1.13.0
      • coshIntegral

        public static Apfloat coshIntegral​(Apfloat x)
                                    throws java.lang.ArithmeticException,
                                           ApfloatRuntimeException
        Hyperbolic cosine integral.

        Parameters:
        x - The argument.
        Returns:
        Chi(x)
        Throws:
        java.lang.ArithmeticException - If x is nonpositive.
        ApfloatRuntimeException
        Since:
        1.13.0
      • besselJ

        public static Apfloat besselJ​(Apfloat ν,
                                      Apfloat x)
                               throws java.lang.ArithmeticException,
                                      ApfloatRuntimeException
        Bessel function of the first kind.

        Parameters:
        \u03bd - The order.
        x - The argument.
        Returns:
        Jν(x)
        Throws:
        java.lang.ArithmeticException - If ν is < 0 and ν is not an integer and x is zero. Also if ν is not an integer and x is < 0.
        ApfloatRuntimeException
        Since:
        1.13.0
      • besselI

        public static Apfloat besselI​(Apfloat ν,
                                      Apfloat x)
                               throws java.lang.ArithmeticException,
                                      ApfloatRuntimeException
        Modified Bessel function of the first kind.

        Parameters:
        \u03bd - The order.
        x - The argument.
        Returns:
        Iν(x)
        Throws:
        java.lang.ArithmeticException - If ν is < 0 and ν is not an integer and x is zero. Also if ν is not an integer and x is < 0.
        ApfloatRuntimeException
        Since:
        1.13.0
      • besselK

        public static Apfloat besselK​(Apfloat ν,
                                      Apfloat x)
                               throws java.lang.ArithmeticException,
                                      ApfloatRuntimeException
        Modified Bessel function of the second kind.

        Parameters:
        \u03bd - The order.
        x - The argument.
        Returns:
        Kν(x)
        Throws:
        java.lang.ArithmeticException - If x is ≤ 0.
        ApfloatRuntimeException
        Since:
        1.13.0
      • ellipticK

        public static Apfloat ellipticK​(Apfloat x)
                                 throws java.lang.ArithmeticException,
                                        ApfloatRuntimeException
        Complete elliptic integral of the first kind.

        Note that this function uses the definition: K ( x ) 0 π 2 1 1 - x sin 2 ( t ) t

        Parameters:
        x - The argument.
        Returns:
        K(x)
        Throws:
        InfiniteExpansionException - If x is zero.
        java.lang.ArithmeticException - If x is ≥ 1.
        ApfloatRuntimeException
        Since:
        1.13.0
      • ellipticE

        public static Apfloat ellipticE​(Apfloat x)
                                 throws java.lang.ArithmeticException,
                                        ApfloatRuntimeException
        Complete elliptic integral of the second kind.

        Note that this function uses the definition: E ( x ) 0 π 2 1 - x sin 2 ( t ) t

        Parameters:
        x - The argument.
        Returns:
        E(x)
        Throws:
        InfiniteExpansionException - If x is zero.
        java.lang.ArithmeticException - If x is > 1.
        ApfloatRuntimeException
        Since:
        1.13.0
      • laguerreL

        public static Apfloat laguerreL​(Apfloat ν,
                                        Apfloat λ,
                                        Apfloat x)
                                 throws ApfloatRuntimeException
        Generalized Laguerre function. For integer values of ν gives the generalized Laguerre polynomial.

        Parameters:
        \u03bd - The first argument.
        \u03bb - The second argument.
        x - The third argument.
        Returns:
        Lνλ(x)
        Throws:
        ApfloatRuntimeException
        Since:
        1.14.0
      • legendreP

        public static Apfloat legendreP​(Apfloat ν,
                                        Apfloat x)
                                 throws java.lang.ArithmeticException,
                                        ApfloatRuntimeException
        Legendre function. For integer values of ν gives the Legendre polynomial.

        Parameters:
        \u03bd - The first argument.
        x - The second argument.
        Returns:
        Pν(x)
        Throws:
        java.lang.ArithmeticException - If ν is not an integer and x ≤ -1.
        ApfloatRuntimeException
        Since:
        1.14.0
      • legendreP

        public static Apfloat legendreP​(Apfloat ν,
                                        Apfloat μ,
                                        Apfloat x)
                                 throws java.lang.ArithmeticException,
                                        ApfloatRuntimeException
        Associated Legendre function of the first kind. Gives Legendre functions of type 2.

        Parameters:
        \u03bd - The first argument.
        \u03bc - The second argument.
        x - The third argument.
        Returns:
        Pνμ(x)
        Throws:
        java.lang.ArithmeticException - If x is ≤ -1 or ≥ 1 and ν or μ is not an integer or μ is not even or μ is not positive and ν < μ.
        ApfloatRuntimeException
        Since:
        1.14.0
      • isEven

        private static boolean isEven​(Apfloat x)
      • legendreQ

        public static Apfloat legendreQ​(Apfloat ν,
                                        Apfloat x)
                                 throws java.lang.ArithmeticException,
                                        ApfloatRuntimeException
        Legendre function of the second kind.

        Parameters:
        \u03bd - The first argument.
        x - The second argument.
        Returns:
        Qν(x)
        Throws:
        java.lang.ArithmeticException - If x is ≥ 1 or ≤ -1.
        ApfloatRuntimeException
        Since:
        1.14.0
      • legendreQ

        public static Apfloat legendreQ​(Apfloat ν,
                                        Apfloat μ,
                                        Apfloat x)
                                 throws java.lang.ArithmeticException,
                                        ApfloatRuntimeException
        Associated Legendre function of the second kind. Gives Legendre functions of type 2.

        Parameters:
        \u03bd - The first argument.
        \u03bc - The second argument.
        x - The third argument.
        Returns:
        Qνμ(x)
        Throws:
        java.lang.ArithmeticException - If x is ≥ 1 or ≤ -1.
        ApfloatRuntimeException
        Since:
        1.14.0
      • chebyshevT

        public static Apfloat chebyshevT​(Apfloat ν,
                                         Apfloat x)
                                  throws java.lang.ArithmeticException,
                                         ApfloatRuntimeException
        Chebyshev function of the first kind. For integer values of ν gives the Chebyshev polynomial of the first kind.

        Parameters:
        \u03bd - The first argument.
        x - The second argument.
        Returns:
        Tν(x)
        Throws:
        java.lang.ArithmeticException - If x is < -1 and ν is not an integer.
        ApfloatRuntimeException
        Since:
        1.14.0
      • checkMinusOneNonInteger

        private static void checkMinusOneNonInteger​(Apfloat ν,
                                                    Apfloat x)
      • chebyshevU

        public static Apfloat chebyshevU​(Apfloat ν,
                                         Apfloat x)
                                  throws java.lang.ArithmeticException,
                                         ApfloatRuntimeException
        Chebyshev function of the second kind. For integer values of ν gives the Chebyshev polynomial of the second kind.

        Parameters:
        \u03bd - The first argument.
        x - The second argument.
        Returns:
        Uν(x)
        Throws:
        java.lang.ArithmeticException - If x is ≤ -1 and ν is not an integer.
        ApfloatRuntimeException
        Since:
        1.14.0
      • gegenbauerC

        public static Apfloat gegenbauerC​(Apfloat ν,
                                          Apfloat x)
                                   throws java.lang.ArithmeticException,
                                          ApfloatRuntimeException
        Renormalized Gegenbauer function.

        Parameters:
        \u03bd - The first argument.
        x - The second argument.
        Returns:
        Cν(0)(x)
        Throws:
        java.lang.ArithmeticException - If ν is zero. Also if x is < -1 and ν is not an integer.
        ApfloatRuntimeException
        Since:
        1.14.0
      • gegenbauerC

        public static Apfloat gegenbauerC​(Apfloat ν,
                                          Apfloat λ,
                                          Apfloat x)
                                   throws java.lang.ArithmeticException,
                                          ApfloatRuntimeException
        Gegenbauer function. For nonnegative integer values of ν gives the Gegenbauer polynomial.

        Parameters:
        \u03bd - The first argument.
        \u03bb - The second argument.
        x - The third argument.
        Returns:
        Cνλ(x)
        Throws:
        java.lang.ArithmeticException - If x is < -1 and ν is not an integer. Also if x is -1 and λ is > 1/2. Also if x is -1 and λ is 1/2 and ν is not an integer.
        ApfloatRuntimeException
        Since:
        1.14.0
      • jacobiP

        public static Apfloat jacobiP​(Apfloat ν,
                                      Apfloat a,
                                      Apfloat b,
                                      Apfloat x)
                               throws java.lang.ArithmeticException,
                                      ApfloatRuntimeException
        Jacobi function. For nonnegative integer values of ν gives the Jacobi polynomial.

        Parameters:
        \u03bd - The first argument.
        a - The second argument.
        b - The third argument.
        x - The fourth argument.
        Returns:
        Pν(a,b)(x)
        Throws:
        java.lang.ArithmeticException - If ν is not a positive integer and either x is -1 and b is > 0 or x is < -1. Also if ν + a is a negative integer and ν is not an integer.
        ApfloatRuntimeException
        Since:
        1.14.0
      • eulerE

        public static Apfloat eulerE​(long n,
                                     Apfloat x)
                              throws java.lang.IllegalArgumentException,
                                     ApfloatRuntimeException
        Euler polynomial.

        Parameters:
        n - The first argument.
        x - The second argument.
        Returns:
        En(x)
        Throws:
        java.lang.IllegalArgumentException - If n < 0.
        ApfloatRuntimeException
        Since:
        1.14.0
      • bernoulliB

        public static Apfloat bernoulliB​(long n,
                                         Apfloat x)
                                  throws java.lang.IllegalArgumentException,
                                         ApfloatRuntimeException
        Bernoulli polynomial.

        Parameters:
        n - The first argument.
        x - The second argument.
        Returns:
        Bn(x)
        Throws:
        java.lang.IllegalArgumentException - If n < 0.
        ApfloatRuntimeException
        Since:
        1.14.0
      • harmonicNumber

        public static Apfloat harmonicNumber​(Apfloat x,
                                             Apfloat r)
                                      throws java.lang.ArithmeticException,
                                             ApfloatRuntimeException
        Generalized harmonic number.

        Parameters:
        x - The first argument.
        r - The second argument.
        Returns:
        Hx(r)
        Throws:
        java.lang.ArithmeticException - If x is a negative integer, unless r is a nonpositive integer. Also if x is < -1 and r is not an integer.
        ApfloatRuntimeException
        Since:
        1.14.0
      • polylog

        public static Apfloat polylog​(Apfloat ν,
                                      Apfloat x)
                               throws java.lang.ArithmeticException,
                                      ApfloatRuntimeException
        Polylogarithm.

        Parameters:
        \u03bd - The first argument.
        x - The second argument.
        Returns:
        Liν(x)
        Throws:
        java.lang.ArithmeticException - If ν is ≤ 1 and x is 1 or if x is > 1.
        ApfloatRuntimeException
        Since:
        1.14.0
      • random

        public static Apfloat random​(long digits)
        Generates a random number. Uses the default radix. Returned values are chosen pseudorandomly with (approximately) uniform distribution from the range 0 ≤ x < 1. The generated random numbers may have leading zeros and may thus not always have exactly the requested number of significant digits. The precision of the numbers is the requested number of digits minus the number of leading zeros. Trailing zeros do not affect the precision.
        Parameters:
        digits - Maximum number of digits in the number.
        Returns:
        A random number, uniformly distributed between 0 ≤ x < 1.
        Throws:
        java.lang.NumberFormatException - If the default radix is not valid.
        java.lang.IllegalArgumentException - In case the number of specified digits is invalid.
        Since:
        1.9.0
      • random

        public static Apfloat random​(long digits,
                                     int radix)
        Generates a random number. Returned values are chosen pseudorandomly with (approximately) uniform distribution from the range 0 ≤ x < 1. The generated random numbers may have leading zeros and may thus not always have exactly the requested number of significant digits. The precision of the numbers is the requested number of digits minus the number of leading zeros. Trailing zeros do not affect the precision.
        Parameters:
        digits - Maximum number of digits in the number.
        radix - The radix in which the number should be generated.
        Returns:
        A random number, uniformly distributed between 0 ≤ x < 1, in base radix.
        Throws:
        java.lang.NumberFormatException - If the radix is not valid.
        java.lang.IllegalArgumentException - In case the number of specified digits is invalid.
        Since:
        1.9.0
      • randomGaussian

        public static Apfloat randomGaussian​(long digits)
        Generates a random, Gaussian ("normally") distributed number value with mean 0 and standard deviation 1. Uses the default radix.
        Parameters:
        digits - Maximum number of digits in the number.
        Returns:
        A random number, Gaussian ("normally") distributed with mean 0 and standard deviation 1.
        Throws:
        java.lang.NumberFormatException - If the default radix is not valid.
        java.lang.IllegalArgumentException - In case the number of specified digits is invalid.
        Since:
        1.9.0
      • randomGaussian

        public static Apfloat randomGaussian​(long digits,
                                             int radix)
        Generates a random, Gaussian ("normally") distributed number value with mean 0 and standard deviation 1. Uses the default radix.
        Parameters:
        digits - Maximum number of digits in the number.
        radix - The radix in which the number should be generated.
        Returns:
        A random number, Gaussian ("normally") distributed with mean 0 and standard deviation 1.
        Throws:
        java.lang.NumberFormatException - If the radix is not valid.
        java.lang.IllegalArgumentException - In case the number of specified digits is invalid.
        Since:
        1.9.0
      • continuedFraction

        public static Apint[] continuedFraction​(Apfloat x,
                                                int n)
        Generates the first n terms in the continued fraction representation of x.

        Note that the result length might be less than n, depending on the input value and precision. The last terms could be incorrect due to accumulating round-off errors.

        Parameters:
        x - The number whose continued fraction terms should be generated.
        n - The maximum number of terms to generate.
        Returns:
        The continued fraction.
        Throws:
        java.lang.IllegalArgumentException - If n is less than one.
        Since:
        1.12.0
      • convergents

        public static Aprational[] convergents​(Apfloat x,
                                               int n)
        Generates the first n convergents corresponding to the continued fraction of x.

        Note that the result length might be less than n, depending on the input value and precision. The last convergents could be incorrect due to accumulating round-off errors.

        Parameters:
        x - The number whose continued fraction convergents should be generated.
        n - The maximum number of convergents to generate.
        Returns:
        The convergents.
        Throws:
        java.lang.IllegalArgumentException - If n is less than one.
        Since:
        1.12.0
      • max

        public static Apfloat max​(Apfloat x,
                                  Apfloat y)
        Returns the greater of the two values.
        Parameters:
        x - An argument.
        y - Another argument.
        Returns:
        The greater of the two values.
        Since:
        1.9.0
      • min

        public static Apfloat min​(Apfloat x,
                                  Apfloat y)
        Returns the smaller of the two values.
        Parameters:
        x - An argument.
        y - Another argument.
        Returns:
        The smaller of the two values.
        Since:
        1.9.0
      • nextAfter

        public static Apfloat nextAfter​(Apfloat start,
                                        Apfloat direction)
        Returns the number adjacent to the first argument in the direction of the second argument, considering the scale and precision of the first argument. If the precision of the first argument is infinite, the first argument is returned. If both arguments compare as equal then the first argument is returned.
        Parameters:
        start - The starting value.
        direction - Value indicating which of start's neighbors or start should be returned.
        Returns:
        The number adjacent to start in the direction of direction.
        Since:
        1.10.0
      • nextUp

        public static Apfloat nextUp​(Apfloat x)
        Returns the number adjacent to the argument in the direction of positive infinity, considering the scale and precision of the argument. If the precision of the argument is infinite, the argument is returned.
        Parameters:
        x - The starting value.
        Returns:
        The adjacent value closer to positive infinity.
        Since:
        1.10.0
      • nextDown

        public static Apfloat nextDown​(Apfloat x)
        Returns the number adjacent to the argument in the direction of negative infinity, considering the scale and precision of the argument. If the precision of the argument is infinite, the argument is returned.
        Parameters:
        x - The starting value.
        Returns:
        The adjacent value closer to negative infinity.
        Since:
        1.10.0
      • ulp

        public static Apfloat ulp​(Apfloat x)
        Returns the unit in the last place of the argument, considering the scale and precision. This is same as the difference between the argument and the value returned from nextUp(Apfloat). If the precision of the argument is infinite, zero is returned.

        For example, ulp of 1. is 1, ulp of 1.1 is 0.1 and ulp of 1.001 is 0.001 (considering significant digits only).

        Parameters:
        x - The argument.
        Returns:
        The ulp of the argument.
        Since:
        1.10.0
      • nextInDirection

        private static Apfloat nextInDirection​(Apfloat x,
                                               int direction)
      • getRadixKey

        private static java.lang.Object getRadixKey​(java.util.Map<java.lang.Integer,​java.lang.Object> radixKeys,
                                                    int radix)
      • factorial

        static Apfloat factorial​(long n,
                                 long precision,
                                 int radix)
                          throws java.lang.ArithmeticException,
                                 java.lang.NumberFormatException,
                                 ApfloatRuntimeException
        Throws:
        java.lang.ArithmeticException
        java.lang.NumberFormatException
        ApfloatRuntimeException
      • doubleFactorial

        static Apfloat doubleFactorial​(long n,
                                       long precision)
                                throws java.lang.ArithmeticException,
                                       java.lang.NumberFormatException,
                                       ApfloatRuntimeException
        Throws:
        java.lang.ArithmeticException
        java.lang.NumberFormatException
        ApfloatRuntimeException
      • doubleFactorial

        static Apfloat doubleFactorial​(long n,
                                       long precision,
                                       int radix)
                                throws java.lang.ArithmeticException,
                                       java.lang.NumberFormatException,
                                       ApfloatRuntimeException
        Throws:
        java.lang.ArithmeticException
        java.lang.NumberFormatException
        ApfloatRuntimeException
      • cleanUp

        static void cleanUp()