The error function, erf (x), was not found in math.h for visual studio 2005

It seems that cmath for visual studio 2005 does not have erf (x). I use the NIST statistical test suite for random and pseudo random number generators. In the cephes.c method, double cephes_normal (double x), it uses the math function C99 erf (x), which I believe is not supported by visual studio 2005.

How can I solve this problem? Here I saw a solution in C ++: http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/9f5f4bf4-c0ae-4620-8039-4dc36e98d718/

Someone used the boost C ++ math library. But I don’t think I can include the C ++ header in the C source file.

+4
source share
3 answers

Some Google search engines have discovered this C ++ implementation (here it is reissued):

erf code:

 #include <cmath> double erf(double x) { // constants double a1 = 0.254829592; double a2 = -0.284496736; double a3 = 1.421413741; double a4 = -1.453152027; double a5 = 1.061405429; double p = 0.3275911; // Save the sign of x int sign = 1; if (x < 0) sign = -1; x = fabs(x); // A&S formula 7.1.26 double t = 1.0/(1.0 + p*x); double y = 1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x); return sign*y; } 

Test function

 void testErf() { // Select a few input values double x[] = { -3, -1, 0.0, 0.5, 2.1 }; // Output computed by Mathematica // y = Erf[x] double y[] = { -0.999977909503, -0.842700792950, 0.0, 0.520499877813, 0.997020533344 }; int numTests = sizeof(x)/sizeof(double); double maxError = 0.0; for (int i = 0; i < numTests; ++i) { double error = fabs(y[i] - erf(x[i])); if (error > maxError) maxError = error; } std::cout << "Maximum error: " << maxError << "\n"; } 
+4
source

Numericical Recipes contains an implementation of the error function (chapter 6 in my edition).

There's a Python implementation on John D. Cook's blog, which looks trivial to translate.

0
source

Ok, write it yourself, look at acceleration, C-ify it and use it, or don't use Visual Studio 2005 for this project, but something like GCC (MinGW) .

0
source

All Articles