| Alternative 1 | |
|---|---|
| Accuracy | 99.9% |
| Cost | 20036 |
(FPCore (x y) :precision binary64 (- (/ 2.0 (+ 1.0 (exp (* -2.0 x)))) 1.0))
(FPCore (x y)
:precision binary64
(if (<= (* -2.0 x) -5.0)
(fma (expm1 (* -2.0 x)) (/ 2.0 (expm1 (* x -4.0))) -1.0)
(if (<= (* -2.0 x) 1e-6)
(+
(* -0.05396825396825397 (pow x 7.0))
(+
(* -0.3333333333333333 (pow x 3.0))
(+ x (* 0.13333333333333333 (pow x 5.0)))))
(+ -1.0 (/ 2.0 (+ 1.0 (exp (* -2.0 x))))))))double code(double x, double y) {
return (2.0 / (1.0 + exp((-2.0 * x)))) - 1.0;
}
double code(double x, double y) {
double tmp;
if ((-2.0 * x) <= -5.0) {
tmp = fma(expm1((-2.0 * x)), (2.0 / expm1((x * -4.0))), -1.0);
} else if ((-2.0 * x) <= 1e-6) {
tmp = (-0.05396825396825397 * pow(x, 7.0)) + ((-0.3333333333333333 * pow(x, 3.0)) + (x + (0.13333333333333333 * pow(x, 5.0))));
} else {
tmp = -1.0 + (2.0 / (1.0 + exp((-2.0 * x))));
}
return tmp;
}
function code(x, y) return Float64(Float64(2.0 / Float64(1.0 + exp(Float64(-2.0 * x)))) - 1.0) end
function code(x, y) tmp = 0.0 if (Float64(-2.0 * x) <= -5.0) tmp = fma(expm1(Float64(-2.0 * x)), Float64(2.0 / expm1(Float64(x * -4.0))), -1.0); elseif (Float64(-2.0 * x) <= 1e-6) tmp = Float64(Float64(-0.05396825396825397 * (x ^ 7.0)) + Float64(Float64(-0.3333333333333333 * (x ^ 3.0)) + Float64(x + Float64(0.13333333333333333 * (x ^ 5.0))))); else tmp = Float64(-1.0 + Float64(2.0 / Float64(1.0 + exp(Float64(-2.0 * x))))); end return tmp end
code[x_, y_] := N[(N[(2.0 / N[(1.0 + N[Exp[N[(-2.0 * x), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - 1.0), $MachinePrecision]
code[x_, y_] := If[LessEqual[N[(-2.0 * x), $MachinePrecision], -5.0], N[(N[(Exp[N[(-2.0 * x), $MachinePrecision]] - 1), $MachinePrecision] * N[(2.0 / N[(Exp[N[(x * -4.0), $MachinePrecision]] - 1), $MachinePrecision]), $MachinePrecision] + -1.0), $MachinePrecision], If[LessEqual[N[(-2.0 * x), $MachinePrecision], 1e-6], N[(N[(-0.05396825396825397 * N[Power[x, 7.0], $MachinePrecision]), $MachinePrecision] + N[(N[(-0.3333333333333333 * N[Power[x, 3.0], $MachinePrecision]), $MachinePrecision] + N[(x + N[(0.13333333333333333 * N[Power[x, 5.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(-1.0 + N[(2.0 / N[(1.0 + N[Exp[N[(-2.0 * x), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\frac{2}{1 + e^{-2 \cdot x}} - 1
\begin{array}{l}
\mathbf{if}\;-2 \cdot x \leq -5:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{expm1}\left(-2 \cdot x\right), \frac{2}{\mathsf{expm1}\left(x \cdot -4\right)}, -1\right)\\
\mathbf{elif}\;-2 \cdot x \leq 10^{-6}:\\
\;\;\;\;-0.05396825396825397 \cdot {x}^{7} + \left(-0.3333333333333333 \cdot {x}^{3} + \left(x + 0.13333333333333333 \cdot {x}^{5}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;-1 + \frac{2}{1 + e^{-2 \cdot x}}\\
\end{array}
if (*.f64 -2 x) < -5Initial program 100.0%
Applied egg-rr100.0%
[Start]100.0 | \[ \frac{2}{1 + e^{-2 \cdot x}} - 1
\] |
|---|---|
flip-+ [=>]100.0 | \[ \frac{2}{\color{blue}{\frac{1 \cdot 1 - e^{-2 \cdot x} \cdot e^{-2 \cdot x}}{1 - e^{-2 \cdot x}}}} - 1
\] |
associate-/r/ [=>]100.0 | \[ \color{blue}{\frac{2}{1 \cdot 1 - e^{-2 \cdot x} \cdot e^{-2 \cdot x}} \cdot \left(1 - e^{-2 \cdot x}\right)} - 1
\] |
sub-neg [=>]100.0 | \[ \frac{2}{1 \cdot 1 - e^{-2 \cdot x} \cdot e^{-2 \cdot x}} \cdot \color{blue}{\left(1 + \left(-e^{-2 \cdot x}\right)\right)} - 1
\] |
distribute-lft-in [=>]100.0 | \[ \color{blue}{\left(\frac{2}{1 \cdot 1 - e^{-2 \cdot x} \cdot e^{-2 \cdot x}} \cdot 1 + \frac{2}{1 \cdot 1 - e^{-2 \cdot x} \cdot e^{-2 \cdot x}} \cdot \left(-e^{-2 \cdot x}\right)\right)} - 1
\] |
metadata-eval [=>]100.0 | \[ \left(\frac{2}{\color{blue}{1} - e^{-2 \cdot x} \cdot e^{-2 \cdot x}} \cdot 1 + \frac{2}{1 \cdot 1 - e^{-2 \cdot x} \cdot e^{-2 \cdot x}} \cdot \left(-e^{-2 \cdot x}\right)\right) - 1
\] |
prod-exp [=>]100.0 | \[ \left(\frac{2}{1 - \color{blue}{e^{-2 \cdot x + -2 \cdot x}}} \cdot 1 + \frac{2}{1 \cdot 1 - e^{-2 \cdot x} \cdot e^{-2 \cdot x}} \cdot \left(-e^{-2 \cdot x}\right)\right) - 1
\] |
*-commutative [=>]100.0 | \[ \left(\frac{2}{1 - e^{\color{blue}{x \cdot -2} + -2 \cdot x}} \cdot 1 + \frac{2}{1 \cdot 1 - e^{-2 \cdot x} \cdot e^{-2 \cdot x}} \cdot \left(-e^{-2 \cdot x}\right)\right) - 1
\] |
*-commutative [=>]100.0 | \[ \left(\frac{2}{1 - e^{x \cdot -2 + \color{blue}{x \cdot -2}}} \cdot 1 + \frac{2}{1 \cdot 1 - e^{-2 \cdot x} \cdot e^{-2 \cdot x}} \cdot \left(-e^{-2 \cdot x}\right)\right) - 1
\] |
distribute-lft-out [=>]100.0 | \[ \left(\frac{2}{1 - e^{\color{blue}{x \cdot \left(-2 + -2\right)}}} \cdot 1 + \frac{2}{1 \cdot 1 - e^{-2 \cdot x} \cdot e^{-2 \cdot x}} \cdot \left(-e^{-2 \cdot x}\right)\right) - 1
\] |
metadata-eval [=>]100.0 | \[ \left(\frac{2}{1 - e^{x \cdot \color{blue}{-4}}} \cdot 1 + \frac{2}{1 \cdot 1 - e^{-2 \cdot x} \cdot e^{-2 \cdot x}} \cdot \left(-e^{-2 \cdot x}\right)\right) - 1
\] |
Simplified100.0%
[Start]100.0 | \[ \left(\frac{2}{1 - e^{x \cdot -4}} \cdot 1 + \frac{2}{1 - e^{x \cdot -4}} \cdot \left(-{\left(e^{-2}\right)}^{x}\right)\right) - 1
\] |
|---|---|
distribute-lft-out [=>]100.0 | \[ \color{blue}{\frac{2}{1 - e^{x \cdot -4}} \cdot \left(1 + \left(-{\left(e^{-2}\right)}^{x}\right)\right)} - 1
\] |
metadata-eval [<=]100.0 | \[ \frac{\color{blue}{\frac{-2}{-1}}}{1 - e^{x \cdot -4}} \cdot \left(1 + \left(-{\left(e^{-2}\right)}^{x}\right)\right) - 1
\] |
associate-/r* [<=]100.0 | \[ \color{blue}{\frac{-2}{-1 \cdot \left(1 - e^{x \cdot -4}\right)}} \cdot \left(1 + \left(-{\left(e^{-2}\right)}^{x}\right)\right) - 1
\] |
neg-mul-1 [<=]100.0 | \[ \frac{-2}{\color{blue}{-\left(1 - e^{x \cdot -4}\right)}} \cdot \left(1 + \left(-{\left(e^{-2}\right)}^{x}\right)\right) - 1
\] |
neg-sub0 [=>]100.0 | \[ \frac{-2}{\color{blue}{0 - \left(1 - e^{x \cdot -4}\right)}} \cdot \left(1 + \left(-{\left(e^{-2}\right)}^{x}\right)\right) - 1
\] |
associate--r- [=>]100.0 | \[ \frac{-2}{\color{blue}{\left(0 - 1\right) + e^{x \cdot -4}}} \cdot \left(1 + \left(-{\left(e^{-2}\right)}^{x}\right)\right) - 1
\] |
metadata-eval [=>]100.0 | \[ \frac{-2}{\color{blue}{-1} + e^{x \cdot -4}} \cdot \left(1 + \left(-{\left(e^{-2}\right)}^{x}\right)\right) - 1
\] |
+-commutative [<=]100.0 | \[ \frac{-2}{\color{blue}{e^{x \cdot -4} + -1}} \cdot \left(1 + \left(-{\left(e^{-2}\right)}^{x}\right)\right) - 1
\] |
metadata-eval [<=]100.0 | \[ \frac{-2}{e^{x \cdot -4} + \color{blue}{\left(-1\right)}} \cdot \left(1 + \left(-{\left(e^{-2}\right)}^{x}\right)\right) - 1
\] |
sub-neg [<=]100.0 | \[ \frac{-2}{\color{blue}{e^{x \cdot -4} - 1}} \cdot \left(1 + \left(-{\left(e^{-2}\right)}^{x}\right)\right) - 1
\] |
sub-neg [<=]100.0 | \[ \frac{-2}{e^{x \cdot -4} - 1} \cdot \color{blue}{\left(1 - {\left(e^{-2}\right)}^{x}\right)} - 1
\] |
associate-*l/ [=>]100.0 | \[ \color{blue}{\frac{-2 \cdot \left(1 - {\left(e^{-2}\right)}^{x}\right)}{e^{x \cdot -4} - 1}} - 1
\] |
metadata-eval [<=]100.0 | \[ \frac{\color{blue}{\left(2 \cdot -1\right)} \cdot \left(1 - {\left(e^{-2}\right)}^{x}\right)}{e^{x \cdot -4} - 1} - 1
\] |
associate-*r* [<=]100.0 | \[ \frac{\color{blue}{2 \cdot \left(-1 \cdot \left(1 - {\left(e^{-2}\right)}^{x}\right)\right)}}{e^{x \cdot -4} - 1} - 1
\] |
neg-mul-1 [<=]100.0 | \[ \frac{2 \cdot \color{blue}{\left(-\left(1 - {\left(e^{-2}\right)}^{x}\right)\right)}}{e^{x \cdot -4} - 1} - 1
\] |
*-lft-identity [<=]100.0 | \[ \frac{2 \cdot \left(-\left(1 - {\left(e^{-2}\right)}^{x}\right)\right)}{\color{blue}{1 \cdot \left(e^{x \cdot -4} - 1\right)}} - 1
\] |
times-frac [=>]100.0 | \[ \color{blue}{\frac{2}{1} \cdot \frac{-\left(1 - {\left(e^{-2}\right)}^{x}\right)}{e^{x \cdot -4} - 1}} - 1
\] |
Taylor expanded in x around inf 100.0%
Simplified100.0%
[Start]100.0 | \[ 2 \cdot \frac{e^{-2 \cdot x} - 1}{e^{-4 \cdot x} - 1} - 1
\] |
|---|---|
*-commutative [<=]100.0 | \[ 2 \cdot \frac{e^{\color{blue}{x \cdot -2}} - 1}{e^{-4 \cdot x} - 1} - 1
\] |
expm1-def [=>]100.0 | \[ 2 \cdot \frac{\color{blue}{\mathsf{expm1}\left(x \cdot -2\right)}}{e^{-4 \cdot x} - 1} - 1
\] |
*-rgt-identity [<=]100.0 | \[ 2 \cdot \frac{\color{blue}{\mathsf{expm1}\left(x \cdot -2\right) \cdot 1}}{e^{-4 \cdot x} - 1} - 1
\] |
*-commutative [=>]100.0 | \[ 2 \cdot \frac{\mathsf{expm1}\left(x \cdot -2\right) \cdot 1}{e^{\color{blue}{x \cdot -4}} - 1} - 1
\] |
expm1-def [=>]100.0 | \[ 2 \cdot \frac{\mathsf{expm1}\left(x \cdot -2\right) \cdot 1}{\color{blue}{\mathsf{expm1}\left(x \cdot -4\right)}} - 1
\] |
associate-*r/ [<=]100.0 | \[ 2 \cdot \color{blue}{\left(\mathsf{expm1}\left(x \cdot -2\right) \cdot \frac{1}{\mathsf{expm1}\left(x \cdot -4\right)}\right)} - 1
\] |
associate-*r/ [=>]100.0 | \[ 2 \cdot \color{blue}{\frac{\mathsf{expm1}\left(x \cdot -2\right) \cdot 1}{\mathsf{expm1}\left(x \cdot -4\right)}} - 1
\] |
*-rgt-identity [=>]100.0 | \[ 2 \cdot \frac{\color{blue}{\mathsf{expm1}\left(x \cdot -2\right)}}{\mathsf{expm1}\left(x \cdot -4\right)} - 1
\] |
associate-*r/ [=>]100.0 | \[ \color{blue}{\frac{2 \cdot \mathsf{expm1}\left(x \cdot -2\right)}{\mathsf{expm1}\left(x \cdot -4\right)}} - 1
\] |
associate-*l/ [<=]100.0 | \[ \color{blue}{\frac{2}{\mathsf{expm1}\left(x \cdot -4\right)} \cdot \mathsf{expm1}\left(x \cdot -2\right)} - 1
\] |
*-commutative [<=]100.0 | \[ \color{blue}{\mathsf{expm1}\left(x \cdot -2\right) \cdot \frac{2}{\mathsf{expm1}\left(x \cdot -4\right)}} - 1
\] |
sub-neg [=>]100.0 | \[ \color{blue}{\mathsf{expm1}\left(x \cdot -2\right) \cdot \frac{2}{\mathsf{expm1}\left(x \cdot -4\right)} + \left(-1\right)}
\] |
metadata-eval [=>]100.0 | \[ \mathsf{expm1}\left(x \cdot -2\right) \cdot \frac{2}{\mathsf{expm1}\left(x \cdot -4\right)} + \color{blue}{-1}
\] |
if -5 < (*.f64 -2 x) < 9.99999999999999955e-7Initial program 7.6%
Taylor expanded in x around 0 99.9%
if 9.99999999999999955e-7 < (*.f64 -2 x) Initial program 99.7%
Final simplification99.9%
| Alternative 1 | |
|---|---|
| Accuracy | 99.9% |
| Cost | 20036 |
| Alternative 2 | |
|---|---|
| Accuracy | 99.9% |
| Cost | 14025 |
| Alternative 3 | |
|---|---|
| Accuracy | 99.9% |
| Cost | 7497 |
| Alternative 4 | |
|---|---|
| Accuracy | 79.3% |
| Cost | 708 |
| Alternative 5 | |
|---|---|
| Accuracy | 76.8% |
| Cost | 196 |
| Alternative 6 | |
|---|---|
| Accuracy | 27.2% |
| Cost | 64 |
herbie shell --seed 2023137
(FPCore (x y)
:name "Logistic function from Lakshay Garg"
:precision binary64
(- (/ 2.0 (+ 1.0 (exp (* -2.0 x)))) 1.0))