Hey does anyone know if there is an error function in the math library of C++? I think there is so, but I just can't figure out how to use it.

Yes:

The 2001 ANSI standard added the erfc function ( 1-erf(x) ), for float/double/long double.

Not 100% sure when that got built into most version of cmath and math.h. But by now almost every compiler should have it, and should have had it for nearly 8-9 years.
Certainly it is is gcc/g++.

Not the best example

``````#include <cmath>
#include <iostream>

int
main()
{
for(int i=0;i<50;i++)
{
std::cout<<"x == "<<i*0.1<<" "<<-erfc(i*0.1)+1.0<<std::endl;
}
}``````

Please note : that erf has been added to a lot of cmath files, but I didn't know if that was in the standard

This is how I'm using it. But...It says that identifier not found for "erfc".

``````#include <iostream>
#include <cmath>
#include <math.h>
#include <fstream>
#include <string>
using namespace std;

int main()
{

double value, x;

x =2;

value = erfc(x);

return 0;

}``````

Hi

I didn't found any error function when I was searching the compilers (gcc, visual c, watcom). Therefore, I took an approximation from Abramowitz/Stegun and wrote my own erf(x). It's approximation error is about 10^(-7). which was almost always sufficient for my apps. erf(x) = 1-erfc(x).

``````double erf(double x)
{
/* erf(z) = 2/sqrt(pi) * Integral(0..x) exp( -t^2) dt
erf(0.01) = 0.0112834772 erf(3.7) = 0.9999998325
Abramowitz/Stegun: p299, |erf(z)-erf| <= 1.5*10^(-7)
*/
double y = 1.0 / ( 1.0 + 0.3275911 * x);
return 1 - (((((
+ 1.061405429  * y
- 1.453152027) * y
+ 1.421413741) * y
- 0.284496736) * y
+ 0.254829592) * y)
* exp (-x * x);
}``````

Maybe this small function is also useful for you.

--tesu

"tesuji"'s little erf(x) function saved my time...I was thinking to write one for my own to use with MS Visual C++ 6.0 compiler. thanks tesuji.

Hi munur93,