MnMachinePrecision.cxx

Go to the documentation of this file.
00001 // @(#)root/minuit2:$Id: MnMachinePrecision.cxx 20880 2007-11-19 11:23:41Z rdm $
00002 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei   2003-2005  
00003 
00004 /**********************************************************************
00005  *                                                                    *
00006  * Copyright (c) 2005 LCG ROOT Math team,  CERN/PH-SFT                *
00007  *                                                                    *
00008  **********************************************************************/
00009 
00010 #include "Minuit2/MnMachinePrecision.h"
00011 #include "Minuit2/MnTiny.h"
00012 
00013 namespace ROOT {
00014 
00015    namespace Minuit2 {
00016 
00017 
00018 MnMachinePrecision::MnMachinePrecision() : 
00019    fEpsMac(4.0E-7),
00020    fEpsMa2(2.*sqrt(4.0E-7)) {
00021       
00022    //determine machine precision
00023    /*
00024        char e[] = {"e"};
00025        fEpsMac = 8.*dlamch_(e);
00026        fEpsMa2 = 2.*sqrt(fEpsMac);
00027    */
00028       
00029    //   std::cout<<"machine precision eps: "<<Eps()<<std::endl;
00030       
00031    MnTiny mytiny;
00032       
00033    //calculate machine precision
00034    double epstry = 0.5;
00035    double epsbak = 0.;
00036    double epsp1 = 0.;
00037    double one = 1.0;
00038    for(int i = 0; i < 100; i++) {
00039       epstry *= 0.5;
00040       epsp1 = one + epstry;
00041       epsbak = mytiny(epsp1);
00042       if(epsbak < epstry) {
00043          fEpsMac = 8.*epstry;
00044          fEpsMa2 = 2.*sqrt(fEpsMac);
00045          break;
00046       }
00047    } 
00048    
00049 }
00050       
00051    }  // namespace Minuit2
00052    
00053 }  // namespace ROOT

Generated on Tue Jul 5 14:37:10 2011 for ROOT_528-00b_version by  doxygen 1.5.1