| Alternative 1 | |
|---|---|
| Accuracy | 99.8% |
| Cost | 14025 |
(FPCore (x y) :precision binary64 (- (/ 2.0 (+ 1.0 (exp (* -2.0 x)))) 1.0))
(FPCore (x y)
:precision binary64
(if (<= (* -2.0 x) -20.0)
(+ (* (expm1 (* -2.0 x)) (/ 2.0 (expm1 (* x -4.0)))) -1.0)
(if (<= (* -2.0 x) 0.0001)
(+
(* -0.3333333333333333 (pow x 3.0))
(+ x (* 0.13333333333333333 (pow x 5.0))))
(+ (/ 2.0 (+ 1.0 (exp (* -2.0 x)))) -1.0))))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) <= -20.0) {
tmp = (expm1((-2.0 * x)) * (2.0 / expm1((x * -4.0)))) + -1.0;
} else if ((-2.0 * x) <= 0.0001) {
tmp = (-0.3333333333333333 * pow(x, 3.0)) + (x + (0.13333333333333333 * pow(x, 5.0)));
} else {
tmp = (2.0 / (1.0 + exp((-2.0 * x)))) + -1.0;
}
return tmp;
}
public static double code(double x, double y) {
return (2.0 / (1.0 + Math.exp((-2.0 * x)))) - 1.0;
}
public static double code(double x, double y) {
double tmp;
if ((-2.0 * x) <= -20.0) {
tmp = (Math.expm1((-2.0 * x)) * (2.0 / Math.expm1((x * -4.0)))) + -1.0;
} else if ((-2.0 * x) <= 0.0001) {
tmp = (-0.3333333333333333 * Math.pow(x, 3.0)) + (x + (0.13333333333333333 * Math.pow(x, 5.0)));
} else {
tmp = (2.0 / (1.0 + Math.exp((-2.0 * x)))) + -1.0;
}
return tmp;
}
def code(x, y): return (2.0 / (1.0 + math.exp((-2.0 * x)))) - 1.0
def code(x, y): tmp = 0 if (-2.0 * x) <= -20.0: tmp = (math.expm1((-2.0 * x)) * (2.0 / math.expm1((x * -4.0)))) + -1.0 elif (-2.0 * x) <= 0.0001: tmp = (-0.3333333333333333 * math.pow(x, 3.0)) + (x + (0.13333333333333333 * math.pow(x, 5.0))) else: tmp = (2.0 / (1.0 + math.exp((-2.0 * x)))) + -1.0 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) <= -20.0) tmp = Float64(Float64(expm1(Float64(-2.0 * x)) * Float64(2.0 / expm1(Float64(x * -4.0)))) + -1.0); elseif (Float64(-2.0 * x) <= 0.0001) tmp = Float64(Float64(-0.3333333333333333 * (x ^ 3.0)) + Float64(x + Float64(0.13333333333333333 * (x ^ 5.0)))); else tmp = Float64(Float64(2.0 / Float64(1.0 + exp(Float64(-2.0 * x)))) + -1.0); 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], -20.0], N[(N[(N[(Exp[N[(-2.0 * x), $MachinePrecision]] - 1), $MachinePrecision] * N[(2.0 / N[(Exp[N[(x * -4.0), $MachinePrecision]] - 1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + -1.0), $MachinePrecision], If[LessEqual[N[(-2.0 * x), $MachinePrecision], 0.0001], 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], N[(N[(2.0 / N[(1.0 + N[Exp[N[(-2.0 * x), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + -1.0), $MachinePrecision]]]
\frac{2}{1 + e^{-2 \cdot x}} - 1
\begin{array}{l}
\mathbf{if}\;-2 \cdot x \leq -20:\\
\;\;\;\;\mathsf{expm1}\left(-2 \cdot x\right) \cdot \frac{2}{\mathsf{expm1}\left(x \cdot -4\right)} + -1\\
\mathbf{elif}\;-2 \cdot x \leq 0.0001:\\
\;\;\;\;-0.3333333333333333 \cdot {x}^{3} + \left(x + 0.13333333333333333 \cdot {x}^{5}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{2}{1 + e^{-2 \cdot x}} + -1\\
\end{array}
Results
if (*.f64 -2 x) < -20Initial 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
\] |
*-commutative [=>]100.0 | \[ \frac{\color{blue}{\left(-\left(1 - {\left(e^{-2}\right)}^{x}\right)\right) \cdot 2}}{e^{x \cdot -4} - 1} - 1
\] |
associate-*r/ [<=]100.0 | \[ \color{blue}{\left(-\left(1 - {\left(e^{-2}\right)}^{x}\right)\right) \cdot \frac{2}{e^{x \cdot -4} - 1}} - 1
\] |
if -20 < (*.f64 -2 x) < 1.00000000000000005e-4Initial program 8.0%
Taylor expanded in x around 0 99.7%
if 1.00000000000000005e-4 < (*.f64 -2 x) Initial program 99.9%
Final simplification99.8%
| Alternative 1 | |
|---|---|
| Accuracy | 99.8% |
| Cost | 14025 |
| Alternative 2 | |
|---|---|
| Accuracy | 99.8% |
| Cost | 7497 |
| Alternative 3 | |
|---|---|
| Accuracy | 75.7% |
| Cost | 836 |
| Alternative 4 | |
|---|---|
| Accuracy | 75.7% |
| Cost | 196 |
| Alternative 5 | |
|---|---|
| Accuracy | 27.6% |
| Cost | 64 |
herbie shell --seed 2023131
(FPCore (x y)
:name "Logistic function from Lakshay Garg"
:precision binary64
(- (/ 2.0 (+ 1.0 (exp (* -2.0 x)))) 1.0))