
(FPCore (x)
:precision binary64
(let* ((t_0 (/ 1.0 (fabs x)))
(t_1 (* (* t_0 t_0) t_0))
(t_2 (* (* t_1 t_0) t_0)))
(*
(* (/ 1.0 (sqrt (PI))) (exp (* (fabs x) (fabs x))))
(+
(+ (+ t_0 (* (/ 1.0 2.0) t_1)) (* (/ 3.0 4.0) t_2))
(* (/ 15.0 8.0) (* (* t_2 t_0) t_0))))))\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{1}{\left|x\right|}\\
t_1 := \left(t\_0 \cdot t\_0\right) \cdot t\_0\\
t_2 := \left(t\_1 \cdot t\_0\right) \cdot t\_0\\
\left(\frac{1}{\sqrt{\mathsf{PI}\left(\right)}} \cdot e^{\left|x\right| \cdot \left|x\right|}\right) \cdot \left(\left(\left(t\_0 + \frac{1}{2} \cdot t\_1\right) + \frac{3}{4} \cdot t\_2\right) + \frac{15}{8} \cdot \left(\left(t\_2 \cdot t\_0\right) \cdot t\_0\right)\right)
\end{array}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 11 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x)
:precision binary64
(let* ((t_0 (/ 1.0 (fabs x)))
(t_1 (* (* t_0 t_0) t_0))
(t_2 (* (* t_1 t_0) t_0)))
(*
(* (/ 1.0 (sqrt (PI))) (exp (* (fabs x) (fabs x))))
(+
(+ (+ t_0 (* (/ 1.0 2.0) t_1)) (* (/ 3.0 4.0) t_2))
(* (/ 15.0 8.0) (* (* t_2 t_0) t_0))))))\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{1}{\left|x\right|}\\
t_1 := \left(t\_0 \cdot t\_0\right) \cdot t\_0\\
t_2 := \left(t\_1 \cdot t\_0\right) \cdot t\_0\\
\left(\frac{1}{\sqrt{\mathsf{PI}\left(\right)}} \cdot e^{\left|x\right| \cdot \left|x\right|}\right) \cdot \left(\left(\left(t\_0 + \frac{1}{2} \cdot t\_1\right) + \frac{3}{4} \cdot t\_2\right) + \frac{15}{8} \cdot \left(\left(t\_2 \cdot t\_0\right) \cdot t\_0\right)\right)
\end{array}
\end{array}
(FPCore (x)
:precision binary64
(*
(/ (pow (exp x) x) (sqrt (PI)))
(+
(+
(/ (/ (- (/ 0.5 (* x x)) -1.0) (sqrt x)) (sqrt x))
(* (/ 3.0 4.0) (* (/ 1.0 (* (* x x) (* x x))) (/ 1.0 (fabs x)))))
(/ 1.875 (pow (fabs x) 7.0)))))\begin{array}{l}
\\
\frac{{\left(e^{x}\right)}^{x}}{\sqrt{\mathsf{PI}\left(\right)}} \cdot \left(\left(\frac{\frac{\frac{0.5}{x \cdot x} - -1}{\sqrt{x}}}{\sqrt{x}} + \frac{3}{4} \cdot \left(\frac{1}{\left(x \cdot x\right) \cdot \left(x \cdot x\right)} \cdot \frac{1}{\left|x\right|}\right)\right) + \frac{1.875}{{\left(\left|x\right|\right)}^{7}}\right)
\end{array}
Initial program 100.0%
lift-*.f64N/A
lift-/.f64N/A
associate-*l/N/A
*-lft-identityN/A
lower-/.f64100.0
lift-exp.f64N/A
lift-*.f64N/A
lift-fabs.f64N/A
lift-fabs.f64N/A
sqr-absN/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64100.0
Applied rewrites100.0%
Applied rewrites100.0%
Taylor expanded in x around 0
lower-/.f64N/A
lower-pow.f64N/A
lower-fabs.f64100.0
Applied rewrites100.0%
lift-*.f64N/A
lift-/.f64N/A
lift-fabs.f64N/A
rem-sqrt-square-revN/A
sqrt-unprodN/A
rem-square-sqrtN/A
lift-*.f64N/A
lift-/.f64N/A
lift-fabs.f64N/A
rem-sqrt-square-revN/A
sqrt-unprodN/A
rem-square-sqrtN/A
associate-*r/N/A
frac-timesN/A
Applied rewrites100.0%
(FPCore (x)
:precision binary64
(*
(*
(/
(-
(- (+ (/ 0.75 (pow x 4.0)) 1.0) (/ -0.5 (* x x)))
(/ -1.875 (pow x 6.0)))
x)
(sqrt (/ 1.0 (PI))))
(exp (* x x))))\begin{array}{l}
\\
\left(\frac{\left(\left(\frac{0.75}{{x}^{4}} + 1\right) - \frac{-0.5}{x \cdot x}\right) - \frac{-1.875}{{x}^{6}}}{x} \cdot \sqrt{\frac{1}{\mathsf{PI}\left(\right)}}\right) \cdot e^{x \cdot x}
\end{array}
Initial program 100.0%
Taylor expanded in x around 0
Applied rewrites100.0%
Applied rewrites100.0%
Applied rewrites100.0%
Taylor expanded in x around inf
Applied rewrites100.0%
(FPCore (x)
:precision binary64
(let* ((t_0 (sqrt (/ 1.0 (PI)))))
(*
(/ (fma t_0 (/ (/ (- (/ 0.75 (* x x)) -0.5) x) x) t_0) x)
(exp (* x x)))))\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sqrt{\frac{1}{\mathsf{PI}\left(\right)}}\\
\frac{\mathsf{fma}\left(t\_0, \frac{\frac{\frac{0.75}{x \cdot x} - -0.5}{x}}{x}, t\_0\right)}{x} \cdot e^{x \cdot x}
\end{array}
\end{array}
Initial program 100.0%
Taylor expanded in x around 0
Applied rewrites100.0%
Applied rewrites100.0%
Applied rewrites100.0%
Taylor expanded in x around inf
Applied rewrites99.5%
(FPCore (x) :precision binary64 (* (/ (* (+ (/ 0.5 (* x x)) 1.0) (sqrt (/ 1.0 (PI)))) x) (exp (* x x))))
\begin{array}{l}
\\
\frac{\left(\frac{0.5}{x \cdot x} + 1\right) \cdot \sqrt{\frac{1}{\mathsf{PI}\left(\right)}}}{x} \cdot e^{x \cdot x}
\end{array}
Initial program 100.0%
Taylor expanded in x around 0
Applied rewrites100.0%
Applied rewrites100.0%
Applied rewrites100.0%
Taylor expanded in x around inf
Applied rewrites99.5%
(FPCore (x) :precision binary64 (/ (exp (* x x)) (* (sqrt (PI)) x)))
\begin{array}{l}
\\
\frac{e^{x \cdot x}}{\sqrt{\mathsf{PI}\left(\right)} \cdot x}
\end{array}
Initial program 100.0%
lift-fabs.f64N/A
rem-sqrt-square-revN/A
sqrt-prodN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f64100.0
Applied rewrites100.0%
Taylor expanded in x around 0
lower-*.f64N/A
unpow2N/A
sqr-abs-revN/A
unpow2N/A
lower-/.f64N/A
unpow2N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-PI.f6499.4
Applied rewrites99.4%
Applied rewrites99.4%
Applied rewrites99.4%
Final simplification99.4%
(FPCore (x) :precision binary64 (/ (pow (+ 1.0 x) x) (* (sqrt (PI)) x)))
\begin{array}{l}
\\
\frac{{\left(1 + x\right)}^{x}}{\sqrt{\mathsf{PI}\left(\right)} \cdot x}
\end{array}
Initial program 100.0%
lift-fabs.f64N/A
rem-sqrt-square-revN/A
sqrt-prodN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f64100.0
Applied rewrites100.0%
Taylor expanded in x around 0
lower-*.f64N/A
unpow2N/A
sqr-abs-revN/A
unpow2N/A
lower-/.f64N/A
unpow2N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-PI.f6499.4
Applied rewrites99.4%
Applied rewrites99.4%
Taylor expanded in x around 0
Applied rewrites98.9%
Final simplification98.9%
(FPCore (x) :precision binary64 (let* ((t_0 (sqrt (/ 1.0 (PI))))) (/ (fma (* (fma (* x x) 0.5 1.0) t_0) (* x x) t_0) x)))
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sqrt{\frac{1}{\mathsf{PI}\left(\right)}}\\
\frac{\mathsf{fma}\left(\mathsf{fma}\left(x \cdot x, 0.5, 1\right) \cdot t\_0, x \cdot x, t\_0\right)}{x}
\end{array}
\end{array}
Initial program 100.0%
lift-fabs.f64N/A
rem-sqrt-square-revN/A
sqrt-prodN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f64100.0
Applied rewrites100.0%
Taylor expanded in x around 0
lower-*.f64N/A
unpow2N/A
sqr-abs-revN/A
unpow2N/A
lower-/.f64N/A
unpow2N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-PI.f6499.4
Applied rewrites99.4%
Taylor expanded in x around 0
Applied rewrites76.9%
Final simplification76.9%
(FPCore (x) :precision binary64 (let* ((t_0 (sqrt (/ 1.0 (PI))))) (/ (fma (* (* (* x x) 0.5) t_0) (* x x) t_0) x)))
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sqrt{\frac{1}{\mathsf{PI}\left(\right)}}\\
\frac{\mathsf{fma}\left(\left(\left(x \cdot x\right) \cdot 0.5\right) \cdot t\_0, x \cdot x, t\_0\right)}{x}
\end{array}
\end{array}
Initial program 100.0%
lift-fabs.f64N/A
rem-sqrt-square-revN/A
sqrt-prodN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f64100.0
Applied rewrites100.0%
Taylor expanded in x around 0
lower-*.f64N/A
unpow2N/A
sqr-abs-revN/A
unpow2N/A
lower-/.f64N/A
unpow2N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-PI.f6499.4
Applied rewrites99.4%
Taylor expanded in x around 0
Applied rewrites76.9%
Taylor expanded in x around inf
Applied rewrites76.9%
Final simplification76.9%
(FPCore (x) :precision binary64 (* (* (fma (* x x) 0.5 1.0) (sqrt (/ 1.0 (PI)))) x))
\begin{array}{l}
\\
\left(\mathsf{fma}\left(x \cdot x, 0.5, 1\right) \cdot \sqrt{\frac{1}{\mathsf{PI}\left(\right)}}\right) \cdot x
\end{array}
Initial program 100.0%
lift-fabs.f64N/A
rem-sqrt-square-revN/A
sqrt-prodN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f64100.0
Applied rewrites100.0%
Taylor expanded in x around 0
lower-*.f64N/A
unpow2N/A
sqr-abs-revN/A
unpow2N/A
lower-/.f64N/A
unpow2N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-PI.f6499.4
Applied rewrites99.4%
Taylor expanded in x around 0
Applied rewrites76.9%
Taylor expanded in x around inf
Applied rewrites66.8%
Final simplification66.8%
(FPCore (x) :precision binary64 (/ (fma x x 1.0) (* (sqrt (PI)) x)))
\begin{array}{l}
\\
\frac{\mathsf{fma}\left(x, x, 1\right)}{\sqrt{\mathsf{PI}\left(\right)} \cdot x}
\end{array}
Initial program 100.0%
lift-fabs.f64N/A
rem-sqrt-square-revN/A
sqrt-prodN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f64100.0
Applied rewrites100.0%
Taylor expanded in x around 0
lower-*.f64N/A
unpow2N/A
sqr-abs-revN/A
unpow2N/A
lower-/.f64N/A
unpow2N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-PI.f6499.4
Applied rewrites99.4%
Applied rewrites99.4%
Taylor expanded in x around 0
Applied rewrites53.8%
Final simplification53.8%
(FPCore (x) :precision binary64 (/ 1.0 (* (sqrt (PI)) x)))
\begin{array}{l}
\\
\frac{1}{\sqrt{\mathsf{PI}\left(\right)} \cdot x}
\end{array}
Initial program 100.0%
lift-fabs.f64N/A
rem-sqrt-square-revN/A
sqrt-prodN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f64100.0
Applied rewrites100.0%
Taylor expanded in x around 0
lower-*.f64N/A
unpow2N/A
sqr-abs-revN/A
unpow2N/A
lower-/.f64N/A
unpow2N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-PI.f6499.4
Applied rewrites99.4%
Applied rewrites99.4%
Taylor expanded in x around 0
Applied rewrites2.3%
Final simplification2.3%
herbie shell --seed 2025017
(FPCore (x)
:name "Jmat.Real.erfi, branch x greater than or equal to 5"
:precision binary64
:pre (>= x 0.5)
(* (* (/ 1.0 (sqrt (PI))) (exp (* (fabs x) (fabs x)))) (+ (+ (+ (/ 1.0 (fabs x)) (* (/ 1.0 2.0) (* (* (/ 1.0 (fabs x)) (/ 1.0 (fabs x))) (/ 1.0 (fabs x))))) (* (/ 3.0 4.0) (* (* (* (* (/ 1.0 (fabs x)) (/ 1.0 (fabs x))) (/ 1.0 (fabs x))) (/ 1.0 (fabs x))) (/ 1.0 (fabs x))))) (* (/ 15.0 8.0) (* (* (* (* (* (* (/ 1.0 (fabs x)) (/ 1.0 (fabs x))) (/ 1.0 (fabs x))) (/ 1.0 (fabs x))) (/ 1.0 (fabs x))) (/ 1.0 (fabs x))) (/ 1.0 (fabs x)))))))