in C99
誤差関数
80ビット拡張倍精度版 erfl()



\mathrm{erf}(x) = \frac{1}{\sqrt{\pi}} \int_{-x}^x  {e^\displaystyle{-t^2}} dt

2023年3月12日
細田 隆之
English English edition is here.

誤差関数の有理チェビシェフ近似

list.1 [ erfl.c ]
Formulas used

\operatorname{erf}(x) \ \simeq \ \left\{ \begin{array}{ll}
x \ \mathrm{R}_{77}(x^2) \quad & \text{ for \quad$ |x| \ \le \ 0.605$}\\
c + \ \mathrm{P}_{88}(x) \quad & \text{ for \quad$ 0.605 < \ |x| \ \le \ 1.0$}\\
1 - e^{-\displaystyle{x^2}}\mathrm{R}_{88}(x^2) \quad & \text{ for \quad $1.0 \ < \ x \ \le 3.725$}\\
1 - \displaystyle\frac{e^{-\displaystyle{x^2}}}{x}\ \left(\displaystyle{\frac{1}{\sqrt{\pi}} +  \frac{1}{x^2} \mathrm{R}_{55}
(x^{-1})} }\right) & \text{ for \quad $3.725 \ < \ x$}$}\end{array}
但し

  Rpq(z) と Ppq(z) は,分子の次数が p,分母の次数が q の有理多項式です.
c は展開点でのオフセット定数です.
 Download erfl-0.81.tar.gz — source code archive

誤差関数の近似とその近似誤差

Cody の論文[1] に記載されている有理チェビシェフ近似の係数を用いて拡張倍精度で誤差関数の近似を計算すると, 0.5 ≤ |x| ≤ 0.66 の範囲で相対誤差がマシンイプシロンの4倍に達することがありました(下図参照). x = 0 付近で 7次:7次, |x| = 0.8 付近で 8次:8次のパデ近似を用いると, |x| ≤ 0.7 と 0.57 ≤ |x| ≤ 1.05 の範囲でそれぞれ機械イプシロン以内の相対誤差になりました.

計算結果と誤差

x の 4 つの範囲それぞれについて,適切な近似式を用いた拡張倍精度誤差関数の計算における相対誤差は,全範囲で機械イプシロン以内でした.

追補

誤差関数は,標準分布の正規化積分を計算するために使用することができます.


標準正規分布の累積分布と誤差関数の計算
x =    cdf (-x, x) ≃ 
erf (x) ≃ 
 Download erf-0.35.js — source code
参考文献
  1. Cody, W. J. "Rational Chebyshev Approximations for the Error Function." Mathematics of Computation, vol. 23, no. 107, 1969, pp. 631-637.
  2. erf(x) — WolframAlpha
  3. Error function — Wikipedia
  4. Multiply-accumulate operation — Wikipedia

www.finetune.co.jp [Mail] © 2000 Takayuki HOSODA.