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