Commit 3a61e2e227e1a0076c1b38babc43d24027a24b0a

Authored by ellisowen
1 parent 32da71ef

Add `inv_sqrt2pi` and `erfcc` to GMath

include/GMath.hpp
@@ -38,6 +38,7 @@ namespace gammalib { @@ -38,6 +38,7 @@ namespace gammalib {
38 const double pihalf = 1.570796326794896619231321691639751442099; 38 const double pihalf = 1.570796326794896619231321691639751442099;
39 const double inv_pihalf = 0.6366197723675813430755350534900574; 39 const double inv_pihalf = 0.6366197723675813430755350534900574;
40 const double inv_sqrt4pi = 0.2820947917738781434740397257803862929220; 40 const double inv_sqrt4pi = 0.2820947917738781434740397257803862929220;
  41 + const double inv_sqrt2pi = 0.3989422804014327028632180827116826549172;
41 const double pi2 = pi*pi; 42 const double pi2 = pi*pi;
42 const double deg2rad = 0.0174532925199432954743717; 43 const double deg2rad = 0.0174532925199432954743717;
43 const double rad2deg = 57.295779513082322864647722; 44 const double rad2deg = 57.295779513082322864647722;
@@ -68,6 +69,7 @@ namespace gammalib { @@ -68,6 +69,7 @@ namespace gammalib {
68 69
69 // Other functions 70 // Other functions
70 double gammln(const double& arg); 71 double gammln(const double& arg);
  72 + double erfcc(const double& arg);
71 double modulo(const double& v1, const double& v2); 73 double modulo(const double& v1, const double& v2);
72 } 74 }
73 75
pyext/GMath.i
@@ -37,6 +37,7 @@ namespace gammalib { @@ -37,6 +37,7 @@ namespace gammalib {
37 const double pihalf = 1.570796326794896619231321691639751442099; 37 const double pihalf = 1.570796326794896619231321691639751442099;
38 const double inv_pihalf = 0.6366197723675813430755350534900574; 38 const double inv_pihalf = 0.6366197723675813430755350534900574;
39 const double inv_sqrt4pi = 0.2820947917738781434740397257803862929220; 39 const double inv_sqrt4pi = 0.2820947917738781434740397257803862929220;
  40 + const double inv_sqrt2pi = 0.3989422804014327028632180827116826549172;
40 const double pi2 = pi*pi; 41 const double pi2 = pi*pi;
41 const double deg2rad = 0.0174532925199432954743717; 42 const double deg2rad = 0.0174532925199432954743717;
42 const double rad2deg = 57.295779513082322864647722; 43 const double rad2deg = 57.295779513082322864647722;
@@ -67,5 +68,6 @@ namespace gammalib { @@ -67,5 +68,6 @@ namespace gammalib {
67 68
68 // Other functions 69 // Other functions
69 double gammln(const double& arg); 70 double gammln(const double& arg);
  71 + double erfcc(const double& arg);
70 double modulo(const double& v1, const double& v2); 72 double modulo(const double& v1, const double& v2);
71 } 73 }
src/numerics/GMath.cpp
@@ -374,6 +374,31 @@ double gammalib::gammln(const double& arg) { @@ -374,6 +374,31 @@ double gammalib::gammln(const double& arg) {
374 374
375 375
376 /***********************************************************************//** 376 /***********************************************************************//**
  377 + * @brief Computes complementary error function
  378 + *
  379 + * @param[in] arg Argument.
  380 + * @return Complementary error function.
  381 + *
  382 + * Reference: http://en.wikipedia.org/wiki/Complementary_error_function
  383 + ***************************************************************************/
  384 +double gammalib::erfcc(const double& arg) {
  385 + /* (C) Copr. 1986-92 Numerical Recipes Software 0@.1Y.. */
  386 + // Copied from Gaussian.cxx in the Fermi ScienceTools software
  387 + double t, z, ans;
  388 +
  389 + z = std::abs(arg);
  390 + t = 1.0/(1.0+0.5*z);
  391 + ans = t*std::exp(-z*z-1.26551223+t*(1.00002368+t*(0.37409196+t*(0.09678418+
  392 + t*(-0.18628806+t*(0.27886807+t*(-1.13520398+t*(1.48851587+
  393 + t*(-0.82215223+t*0.17087277)))))))));
  394 + double result = arg >= 0.0 ? ans : 2.0-ans;
  395 +
  396 + // Return result
  397 + return result;
  398 +}
  399 +
  400 +
  401 +/***********************************************************************//**
377 * @brief Returns the remainder of the division \a v1/v2. 402 * @brief Returns the remainder of the division \a v1/v2.
378 * 403 *
379 * @param[in] v1 Argument 1. 404 * @param[in] v1 Argument 1.