
              Apache Commons Numbers 1.1 RELEASE NOTES

The Apache Commons Numbers team is pleased to announce the release of
commons-numbers-parent-1.1

The Apache Commons Numbers project provides number types and utilities.

New features, updates and bug fixes. Adds a commons-numbers-bom module. Requires Java 8.

Changes in this version include:

New features:
o NUMBERS-70:   Add a user guide.
o NUMBERS-190:  Add a Bill of Materials (BOM) to aid in dependency management when referencing
        multiple Apache Commons Numbers artifacts. The BOM should be used to ensure all
        imported artifacts are compatible.
o NUMBERS-181:  Updated support for the beta functions. "RegularizedBeta": Added the
        complement and derivative of the regularized beta function.
        Added "IncompleteBeta" and "Beta" classes.
        Functionality is ported from the Boost C++ library.
o NUMBERS-180:  "GammaRatio": Compute the ratio of two gamma functions.
o NUMBERS-177:  "Erfcx": Compute a scaled complementary error function:
        erfcx(z) = erfc(z) * exp(z*z).
o NUMBERS-175:  "GeneralizedContinuedFraction": A continued fraction class to compute using a
        generator. Allows evaluation of continued fractions from a regular series where
        coefficients can be computed iteratively from the previous coefficients.

Fixed Bugs:
o NUMBERS-185:  "Precision": Allow Precision.compareTo using a maxUlps to be used for sorting.
        This corrects handling of NaN comparisons.
o NUMBERS-182:  "LogBeta": Avoid overflow for tiny arguments.
o           "BrentSolver": Avoid overflow creating the initial value between the lower and upper.
o NUMBERS-173:  "ContinuedFraction": Set a minimum bound on the relative error epsilon. Prevents
        an infinite loop when the epsilon is zero.
o           "FactorialDouble": Prevent caching values that are infinite. The cache will support
        factorials up to 170.
o NUMBERS-170:  "RegularizedBeta": Detect edge cases for arguments that can be evaluated by
        exploiting properties of the regularized beta function.
o NUMBERS-168:  "BrentSolver": Identify brackets with small objective values.
o           Fix wrong javadoc. Thanks to Arturo Bernal.

Changes:
o NUMBERS-184:  "Precision": Reduce number of operations in Precision.equals using a maxUlps.
o NUMBERS-183:  Improve the binomial coefficient classes. Avoid recursive method calls.
        Avoid overflow for BinomialCoefficientDouble for large results close to infinity.
        Use precomputed factorials and the LogBeta function for efficiency.
o NUMBERS-178:  "Factorial/FactorialDouble": Tabulate all factorials with exact 64-bit double
        representations of n! up to n=170. This change deprecates the FactorialDouble
        class and removes obsolete caching functionality.
o NUMBERS-176:  "ContinuedFraction": Update to use a shared implementation with
        GeneralizedContinuedFraction.
o NUMBERS-174:  "Gamma/LogGamma/RegularizedGamma": Update the gamma function implementations to
        increase accuracy and support for extreme values.
        Functionality is ported from the Boost C++ library.
o NUMBERS-172:  "Erf/Erfc": Use a rational function approximation accurate to 53-bits of precision.
        This replaces the use of the regularized gamma functions P and Q and increases accuracy
        at extreme limits of the function. Execution speed is improved.
        Functionality is ported from the Boost C++ library.
o NUMBERS-171:  "InverseErfc": Support full range of [0, 2]. This lowers the supported
        minimum value from 2^-53 to double min value. Execution speed is improved.
        Functionality is ported from the Boost C++ library.


For complete information on Apache Commons Numbers, including instructions on how to submit bug
reports, patches, or suggestions for improvement, see the Apache Commons Numbers website:

http://commons.apache.org/proper/commons-numbers/


=============================================================================

              Apache Commons Numbers 1.0 RELEASE NOTES

The Apache Commons Numbers team is pleased to announce the release of
commons-numbers-parent-1.0

The Apache Commons Numbers project provides number types and utilities.

This is the first official release of Apache Commons Numbers.

Apache Commons Numbers 1.0 contains the following library modules:
 commons-numbers-angle (requires Java 8+)
 commons-numbers-arrays (requires Java 8+)
 commons-numbers-combinatorics (requires Java 8+)
 commons-numbers-complex (requires Java 8+)
 commons-numbers-core (requires Java 8+)
 commons-numbers-field (requires Java 8+)
 commons-numbers-fraction (requires Java 8+)
 commons-numbers-gamma (requires Java 8+)
 commons-numbers-primes (requires Java 8+)
 commons-numbers-quaternion (requires Java 8+)
 commons-numbers-rootfinder (requires Java 8+)
N.B. the Performance testing module requires Java 9+. (The unit tests require Java 8+)

Changes in this version include:


Fixed Bugs:
o NUMBERS-153:  Use iterative implementation of "trigamma" function. Thanks to Dmitriy Golovashkin
        for reporting. Thanks to Gilles Sadowski.
o NUMBERS-150:  "Fraction/BigFraction": Fixed pow(int) to handle Integer.MIN_VALUE and throw
        ArithmeticException for negative exponents to a fraction of zero. Thanks to Jin Xu.
o NUMBERS-147:  Fixed Fraction/BigFraction from(double, int) to support Integer.MIN_VALUE as max
        denominator. Thanks to Alex Herbert.

Changes:
o NUMBERS-163:  Combined "LinearCombination" and "Summation" into single "Sum" class. Thanks to
        Matt Juntunen.
o NUMBERS-164:  Added SortInPlace utility, original from Commons Math. Thanks to Gilles Sadowski.
o NUMBERS-159:  Moved "Norms", "LinearCombination", and "Summation" from commons-numbers-arrays
        module to commons-numbers-core module. Moved "CosAngle" from commons-numbers-arrays module
        to commons-numbers-angle module. Thanks to Matt Juntunen.
o NUMBERS-156:  Replaced "SafeNorm" with "Norms". Added "Summation" class for extended precision
        summation. Thanks to Matt Juntunen.
o NUMBERS-161:  "Angle" replaces "PlaneAngle" and "PlaneAngleRadians". Thanks to Gilles Sadowski.
o NUMBERS-158:  Replace angle normalize method with normalizer method that returns operator
        instance. Thanks to Gilles Sadowski.
o NUMBERS-157:  Adding Reduce operation originally from Commons Math to commons-numbers-angle
        module. Thanks to Gilles Sadowski.
o NUMBERS-142:  "LinearCombination": Update to use the dot2s algorithm. Avoids construction of an
        intermediate array for array dot products. Update the hi-lo splitting algorithm
        to use Dekker's split to ensure the product round-off is computed to exact precision.
        Thanks to Alex Herbert.
o NUMBERS-154:  Precision compareTo method now handles NaN properly to ensure consistent sorting.
        Thanks to Gilles Sadowski.
o NUMBERS-149:  "Fraction": Port tests from commons-lang Fraction to demonstrate functional
        compatibility between the lang and numbers implementation of Fraction. Thanks to Jin Xu.
o NUMBERS-151:  "ArithmeticUtils": Refine pow(int, int) and pow(long, int) for edge cases.
        Thanks to Jin Xu.


For complete information on Apache Commons Numbers, including instructions on how to submit bug
reports, patches, or suggestions for improvement, see the Apache Commons Numbers website:

http://commons.apache.org/proper/commons-numbers/


=============================================================================

              Apache Commons Numbers 1.0-beta1 RELEASE NOTES

The Apache Commons Numbers team is pleased to announce the release of
commons-numbers-parent-1.0-beta1

The Apache Commons Numbers project provides number types and utilities.

This is a beta release of Apache Commons Numbers. No guarantees are made regarding the stability
of the API or compatibility with future releases.

Apache Commons Numbers 1.0-beta1 contains the following library modules:
 commons-numbers-angle (requires Java 8+)
 commons-numbers-arrays (requires Java 8+)
 commons-numbers-combinatorics (requires Java 8+)
 commons-numbers-complex (requires Java 8+)
 commons-numbers-core (requires Java 8+)
 commons-numbers-field (requires Java 8+)
 commons-numbers-fraction (requires Java 8+)
 commons-numbers-gamma (requires Java 8+)
 commons-numbers-primes (requires Java 8+)
 commons-numbers-quaternion (requires Java 8+)
 commons-numbers-rootfinder (requires Java 8+)

No changes defined in this version.

For complete information on Apache Commons Numbers, including instructions on how to submit bug
reports, patches, or suggestions for improvement, see the Apache Commons Numbers website:

http://commons.apache.org/proper/commons-numbers/


