
              Apache Commons Math 3.6.1 RELEASE NOTES

The Apache Commons Math team is pleased to announce the release of
commons-math3-3.6.1

The Apache Commons Math project is a library of lightweight, self-contained
mathematics and statistics components addressing the most common practical
problems not immediately available in the Java programming language or
commons-lang.

This is a minor bug fix release. It incorporates three bug fixes since version
3.6. The minimum version of the Java platform required to compile and use
Commons Math 3.6.1 is Java 5.

Changes in this version include:

Fixed Bugs:
o MATH-1316:  Fix code example in User Guide > Statistics > Multiple linear regression. 
o MATH-1342:  Fix ODE integrators when multiple events are nearly simultaneous. 

Changes:
o MATH-1317:  Add uniformity unit tests to "RandomGeneratorAbstractTest". 


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

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


