Geant4 Cross Reference |
>> 1 // $Id:$ 1 // -*- C++ -*- 2 // -*- C++ -*- 2 // 3 // 3 // ------------------------------------------- 4 // ----------------------------------------------------------------------- 4 // HEP Random 5 // HEP Random 5 // --- erfQ --- 6 // --- erfQ --- 6 // method implementation 7 // method implementation file 7 // ------------------------------------------- 8 // ----------------------------------------------------------------------- 8 9 9 // Contains methods that do not depend on larg 10 // Contains methods that do not depend on large tables. 10 // 11 // 11 // erfQ (double x) 12 // erfQ (double x) 12 13 13 // =========================================== 14 // ======================================================================= 14 // M Fischler - Created 1/26/00. 15 // M Fischler - Created 1/26/00. 15 // 16 // 16 // =========================================== 17 // ======================================================================= 17 18 18 #include "CLHEP/Random/Stat.h" 19 #include "CLHEP/Random/Stat.h" 19 #include <cmath> 20 #include <cmath> 20 21 >> 22 using namespace std; >> 23 21 namespace CLHEP { 24 namespace CLHEP { 22 25 23 double HepStat::erfQ (double x) { 26 double HepStat::erfQ (double x) { 24 // 27 // 25 // erfQ is accurate to 7 places. 28 // erfQ is accurate to 7 places. 26 // See Numerical Recipes P 221 29 // See Numerical Recipes P 221 27 // 30 // 28 31 29 double t, z, erfc; 32 double t, z, erfc; 30 33 31 z = std::abs(x); << 34 z = abs(x); 32 t = 1.0/(1.0+.5*z); 35 t = 1.0/(1.0+.5*z); 33 36 34 erfc= t*std::exp(-z*z-1.26551223+t*(1.000023 << 37 erfc= t*exp(-z*z-1.26551223+t*(1.00002368+t*(0.37409196+t*(0.09678418+ 35 t*(-0.18628806+t*(0.27886807+t*(-1.13520398+ 38 t*(-0.18628806+t*(0.27886807+t*(-1.13520398+t*(1.48851587+ 36 t*(-0.82215223+t*0.17087277 ))) ))) ))); 39 t*(-0.82215223+t*0.17087277 ))) ))) ))); 37 40 38 // (The derivation of this formula should be 41 // (The derivation of this formula should be obvious.) 39 42 40 if ( x < 0 ) erfc = 2.0 - erfc; 43 if ( x < 0 ) erfc = 2.0 - erfc; 41 44 42 return 1 - erfc; 45 return 1 - erfc; 43 46 44 } 47 } 45 48 46 49 47 } // namespace CLHEP 50 } // namespace CLHEP 48 51 49 52