### Math Libraries

#### TMath

- Add 2 new functions to compare floating points:

      Bool_t AreEqualAbs(Double_t af, Double_t bf, Double_t epsilon) {
      //return kTRUE if absolute difference between af and bf is less than epsilon
      Bool_t AreEqualRel(Double_t af, Double_t bf, Double_t relPrec) {
      //return kTRUE if relative difference between af and bf is less than relPrec

#### TMatrix

Various changes to the Sparse Matrix classes:

- Fixed Savannah bugs 45807,45502 and 45415
- added a Streamer function to TMatrixTSparse to remove a memory leak.
- Added vector functionality as proposed by Peter D Barnes from LNL (http://root.cern.ch/phpBB2/viewtopic.php?t=8351).

      double   s = v1 * M * v2;  // Mult Function : e.g., physics matrix element
      TMatrixD M = v1' * v2      // outer product of v1 and v2

#### SMatrix

- Use specialized structures for building automatically static tables for mapping the indices conversion from standard row-wise one to the compact one used internally for storing the memory of a symmetrix matrix. This change gives an improvements of around 10-20% in the Kalman filter test (`testKalman.cxx`) and in the matrix operations test.

#### Minuit

- Implement in the `TMinuitMinimizer` class the method `SetPrecision()` using the `"SET EPS"` Minuit command
- Fix a problem when using the user provided gradient in `TMinuitMinimizer`. The gradient calculation is always forced, i.e. Minuit will always use the derivatives calculations provided by the user. This is now the same behavior as in `Minuit2Minimizer`.
- Implement in `TMinuitMinimizer` a method to retrieve the variable name given the index.
- Fix a printout in `TMinuit::mnscan` and a problem observed with valgrind.

#### Minuit2

- Fix a bug in `MnFunctionCross`.
- Add a protection against very small step sizes which can cause nan values in `InitialGradientCalculator`.
- Implement a new function in the `MnUserTransformation` class, `FindIndex(name)`, which returns `-1` when the parameter name does not exist.
- Implement new methods in `Minuit2Minimizer` as requested by the Minimizer interface: `SetPrecision(double eps)` to change the precision value used internally in Minuit2 (in MnPrecision), `VariableName(index)` to return the name of a variable (parameter) given an index, and `VariableIndex(name)` to return the index of a variable given a name.
- Set a status code in `Minuit2Minimizer` according to the following convention:
  `status = minimizeStatus + 10 * minosStatus + 100 * hesseStatus`.
  See the `Minuit2Minimizer` reference documentation for the possible values of `minimizeStatus` , `minosStatus` and `hesseStatus`.
- In MnHesse. when the inversion of the hessian matrix failed, return MnInvertFailed instead of MnHesseFailed.

#### Mathcore Fitting classes

- Fix the fitting with the integral option in multi-dimensions.
- Force the gradient calculation when requested in the minimizer classes and avoid to perform the check when using TMinuit. This was already the case in Minuit2.
- Add new class `ROOT::Fit::SparseData` for dealing with binned sparse data. This class automatically merges the empty region, so they can be considered, whenever possible as a larger single bin. This improves the performances when doing likelihood fits on the sparse data.
- Fix the likelihood fits for variable bin histograms. Now a correct normalization is applied according to the bin volume.
- Add new methods in Minimizer class :
  - `Minimizer::SetPrecision(double eps)` to change in the minimizer the precision on which the objective functions are evaluated. By default the numerical double precision is used inside the minimizers. This method should be used only if the precision in the function evaluation is worse than the double precision.
  - `std::string Minimizer::VariableName (unsigned int index)` to return a name of the minimizer variable (i.e. a fitting parameter) given the integer index. Return an empty string if the variable is not found or of the minimizer does not re-implement this method.
  - `int Minimizer::VariableIndex(const std::string & name)` to return the index of a variable given a name. Return -1 if the variable is not found or if the specific minimizer does not re-implement this function.
- `ROOT::Fit::FitResult`: fix a problem in the I/O, the function pointer is now made temporary and cannot be stored. Change also the `Print()` method to print now the results also when the fit is invalid (when it did not converge correctly).

#### Unuran

- Add a new version 1.5.0. The new version implements a new method `PINV`, that is a quite fast numerical inversion method that only requires only the density function of the distribution.