ROOT logo
// @(#)root/minuit2:$Id: MnMachinePrecision.h 20880 2007-11-19 11:23:41Z rdm $
// Authors: M. Winkler, F. James, L. Moneta, A. Zsenei   2003-2005  

/**********************************************************************
 *                                                                    *
 * Copyright (c) 2005 LCG ROOT Math team,  CERN/PH-SFT                *
 *                                                                    *
 **********************************************************************/

#ifndef ROOT_Minuit2_MnMachinePrecision
#define ROOT_Minuit2_MnMachinePrecision

#include <math.h>

namespace ROOT {

   namespace Minuit2 {


/** 
    determines the relative floating point arithmetic precision. The 
    SetPrecision() method can be used to override Minuit's own determination, 
    when the user knows that the {FCN} function Value is not calculated to 
    the nominal machine accuracy.
 */

class MnMachinePrecision {

public:

  MnMachinePrecision();

  ~MnMachinePrecision() {}

  MnMachinePrecision(const MnMachinePrecision& prec) : fEpsMac(prec.fEpsMac), fEpsMa2(prec.fEpsMa2) {}

  MnMachinePrecision& operator=(const MnMachinePrecision& prec) {
    fEpsMac = prec.fEpsMac;
    fEpsMa2 = prec.fEpsMa2;
    return *this;
  }

  /// eps returns the smallest possible number so that 1.+eps > 1.
  double Eps() const {return fEpsMac;}

  /// eps2 returns 2*sqrt(eps)
  double Eps2() const {return fEpsMa2;}

  /// override Minuit's own determination
  void SetPrecision(double prec) {
    fEpsMac = prec;
    fEpsMa2 = 2.*sqrt(fEpsMac);
  }

private:

  double fEpsMac;
  double fEpsMa2;
};

  }  // namespace Minuit2

}  // namespace ROOT

#endif  // ROOT_Minuit2_MnMachinePrecision
 MnMachinePrecision.h:1
 MnMachinePrecision.h:2
 MnMachinePrecision.h:3
 MnMachinePrecision.h:4
 MnMachinePrecision.h:5
 MnMachinePrecision.h:6
 MnMachinePrecision.h:7
 MnMachinePrecision.h:8
 MnMachinePrecision.h:9
 MnMachinePrecision.h:10
 MnMachinePrecision.h:11
 MnMachinePrecision.h:12
 MnMachinePrecision.h:13
 MnMachinePrecision.h:14
 MnMachinePrecision.h:15
 MnMachinePrecision.h:16
 MnMachinePrecision.h:17
 MnMachinePrecision.h:18
 MnMachinePrecision.h:19
 MnMachinePrecision.h:20
 MnMachinePrecision.h:21
 MnMachinePrecision.h:22
 MnMachinePrecision.h:23
 MnMachinePrecision.h:24
 MnMachinePrecision.h:25
 MnMachinePrecision.h:26
 MnMachinePrecision.h:27
 MnMachinePrecision.h:28
 MnMachinePrecision.h:29
 MnMachinePrecision.h:30
 MnMachinePrecision.h:31
 MnMachinePrecision.h:32
 MnMachinePrecision.h:33
 MnMachinePrecision.h:34
 MnMachinePrecision.h:35
 MnMachinePrecision.h:36
 MnMachinePrecision.h:37
 MnMachinePrecision.h:38
 MnMachinePrecision.h:39
 MnMachinePrecision.h:40
 MnMachinePrecision.h:41
 MnMachinePrecision.h:42
 MnMachinePrecision.h:43
 MnMachinePrecision.h:44
 MnMachinePrecision.h:45
 MnMachinePrecision.h:46
 MnMachinePrecision.h:47
 MnMachinePrecision.h:48
 MnMachinePrecision.h:49
 MnMachinePrecision.h:50
 MnMachinePrecision.h:51
 MnMachinePrecision.h:52
 MnMachinePrecision.h:53
 MnMachinePrecision.h:54
 MnMachinePrecision.h:55
 MnMachinePrecision.h:56
 MnMachinePrecision.h:57
 MnMachinePrecision.h:58
 MnMachinePrecision.h:59
 MnMachinePrecision.h:60
 MnMachinePrecision.h:61
 MnMachinePrecision.h:62
 MnMachinePrecision.h:63
 MnMachinePrecision.h:64
 MnMachinePrecision.h:65