- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
double erf(double x)
{
const double xbreak = 0.46875;
...
y = fabs(x);
// evaluate erf for |x| <= 0.46875
if (y<xbreak)
{
...
}
// evaluate erfc for 0.46875 <= |x| <= 4.0
else if ((y > xbreak) && (y <= 4.))
{
...
}
// evaluate erfc for |x| > 4.0
else
{
...
}
// fix up for negative argument, erf, etc.
if (x > xbreak)
result = 1 - result;
if (x < -xbreak)
result = result - 1;
return result;
}
> Надо было в свое время — перевел MATLABовский исходник на C (сделано через дробно-рациональные аппроксимации на нескольких отрезках)
http://www.rsdn.ru/forum/alg/1797230.all.aspx
defecate-plusplus 05.06.2012 17:19 # +4
bormand 05.06.2012 17:22 # +2
UPD. Хотя тут и 9я строка походу неверна.
defecate-plusplus 05.06.2012 17:24 # +3
именно так я и написал
bormand 05.06.2012 17:27 # 0
TarasB 05.06.2012 19:59 # 0
defecate-plusplus 05.06.2012 17:30 # +3
http://bit.ly/KMndPM
bormand 05.06.2012 17:37 # 0
TarasChlenodevka 18.06.2012 10:43 # −5