Average Error: 29.1 → 0.4
Time: 10.8s
Precision: binary64
Cost: 46980
\[\frac{2}{1 + e^{-2 \cdot x}} - 1 \]
\[\begin{array}{l} t_0 := 2 + \mathsf{expm1}\left(-2 \cdot x\right)\\ t_1 := \frac{2}{t_0}\\ \mathbf{if}\;-2 \cdot x \leq -0.05:\\ \;\;\;\;\frac{\sqrt{t_1 + -1}}{\sqrt{t_1 + 1}} \cdot \sqrt{-1 + \frac{4}{{t_0}^{2}}}\\ \mathbf{elif}\;-2 \cdot x \leq 10^{-8}:\\ \;\;\;\;-0.3333333333333333 \cdot {x}^{3} + \left(x + 0.13333333333333333 \cdot {x}^{5}\right)\\ \mathbf{else}:\\ \;\;\;\;-1\\ \end{array} \]
(FPCore (x y) :precision binary64 (- (/ 2.0 (+ 1.0 (exp (* -2.0 x)))) 1.0))
(FPCore (x y)
 :precision binary64
 (let* ((t_0 (+ 2.0 (expm1 (* -2.0 x)))) (t_1 (/ 2.0 t_0)))
   (if (<= (* -2.0 x) -0.05)
     (*
      (/ (sqrt (+ t_1 -1.0)) (sqrt (+ t_1 1.0)))
      (sqrt (+ -1.0 (/ 4.0 (pow t_0 2.0)))))
     (if (<= (* -2.0 x) 1e-8)
       (+
        (* -0.3333333333333333 (pow x 3.0))
        (+ x (* 0.13333333333333333 (pow x 5.0))))
       -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 t_0 = 2.0 + expm1((-2.0 * x));
	double t_1 = 2.0 / t_0;
	double tmp;
	if ((-2.0 * x) <= -0.05) {
		tmp = (sqrt((t_1 + -1.0)) / sqrt((t_1 + 1.0))) * sqrt((-1.0 + (4.0 / pow(t_0, 2.0))));
	} else if ((-2.0 * x) <= 1e-8) {
		tmp = (-0.3333333333333333 * pow(x, 3.0)) + (x + (0.13333333333333333 * pow(x, 5.0)));
	} else {
		tmp = -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 t_0 = 2.0 + Math.expm1((-2.0 * x));
	double t_1 = 2.0 / t_0;
	double tmp;
	if ((-2.0 * x) <= -0.05) {
		tmp = (Math.sqrt((t_1 + -1.0)) / Math.sqrt((t_1 + 1.0))) * Math.sqrt((-1.0 + (4.0 / Math.pow(t_0, 2.0))));
	} else if ((-2.0 * x) <= 1e-8) {
		tmp = (-0.3333333333333333 * Math.pow(x, 3.0)) + (x + (0.13333333333333333 * Math.pow(x, 5.0)));
	} else {
		tmp = -1.0;
	}
	return tmp;
}
def code(x, y):
	return (2.0 / (1.0 + math.exp((-2.0 * x)))) - 1.0
def code(x, y):
	t_0 = 2.0 + math.expm1((-2.0 * x))
	t_1 = 2.0 / t_0
	tmp = 0
	if (-2.0 * x) <= -0.05:
		tmp = (math.sqrt((t_1 + -1.0)) / math.sqrt((t_1 + 1.0))) * math.sqrt((-1.0 + (4.0 / math.pow(t_0, 2.0))))
	elif (-2.0 * x) <= 1e-8:
		tmp = (-0.3333333333333333 * math.pow(x, 3.0)) + (x + (0.13333333333333333 * math.pow(x, 5.0)))
	else:
		tmp = -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)
	t_0 = Float64(2.0 + expm1(Float64(-2.0 * x)))
	t_1 = Float64(2.0 / t_0)
	tmp = 0.0
	if (Float64(-2.0 * x) <= -0.05)
		tmp = Float64(Float64(sqrt(Float64(t_1 + -1.0)) / sqrt(Float64(t_1 + 1.0))) * sqrt(Float64(-1.0 + Float64(4.0 / (t_0 ^ 2.0)))));
	elseif (Float64(-2.0 * x) <= 1e-8)
		tmp = Float64(Float64(-0.3333333333333333 * (x ^ 3.0)) + Float64(x + Float64(0.13333333333333333 * (x ^ 5.0))));
	else
		tmp = -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_] := Block[{t$95$0 = N[(2.0 + N[(Exp[N[(-2.0 * x), $MachinePrecision]] - 1), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(2.0 / t$95$0), $MachinePrecision]}, If[LessEqual[N[(-2.0 * x), $MachinePrecision], -0.05], N[(N[(N[Sqrt[N[(t$95$1 + -1.0), $MachinePrecision]], $MachinePrecision] / N[Sqrt[N[(t$95$1 + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(-1.0 + N[(4.0 / N[Power[t$95$0, 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[N[(-2.0 * x), $MachinePrecision], 1e-8], 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], -1.0]]]]
\frac{2}{1 + e^{-2 \cdot x}} - 1
\begin{array}{l}
t_0 := 2 + \mathsf{expm1}\left(-2 \cdot x\right)\\
t_1 := \frac{2}{t_0}\\
\mathbf{if}\;-2 \cdot x \leq -0.05:\\
\;\;\;\;\frac{\sqrt{t_1 + -1}}{\sqrt{t_1 + 1}} \cdot \sqrt{-1 + \frac{4}{{t_0}^{2}}}\\

\mathbf{elif}\;-2 \cdot x \leq 10^{-8}:\\
\;\;\;\;-0.3333333333333333 \cdot {x}^{3} + \left(x + 0.13333333333333333 \cdot {x}^{5}\right)\\

\mathbf{else}:\\
\;\;\;\;-1\\


\end{array}

Error

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 3 regimes
  2. if (*.f64 -2 x) < -0.050000000000000003

    1. Initial program 0.0

      \[\frac{2}{1 + e^{-2 \cdot x}} - 1 \]
    2. Simplified0.0

      \[\leadsto \color{blue}{\frac{2}{1 + {\left(e^{x}\right)}^{-2}} + -1} \]
      Proof

      [Start]0.0

      \[ \frac{2}{1 + e^{-2 \cdot x}} - 1 \]

      sub-neg [=>]0.0

      \[ \color{blue}{\frac{2}{1 + e^{-2 \cdot x}} + \left(-1\right)} \]

      *-commutative [=>]0.0

      \[ \frac{2}{1 + e^{\color{blue}{x \cdot -2}}} + \left(-1\right) \]

      exp-prod [=>]0.0

      \[ \frac{2}{1 + \color{blue}{{\left(e^{x}\right)}^{-2}}} + \left(-1\right) \]

      metadata-eval [=>]0.0

      \[ \frac{2}{1 + {\left(e^{x}\right)}^{-2}} + \color{blue}{-1} \]
    3. Applied egg-rr0.0

      \[\leadsto \color{blue}{\frac{\sqrt{\frac{2}{1 + {\left(e^{x}\right)}^{-2}} + -1} \cdot \sqrt{-1 + \frac{4}{{\left(1 + {\left(e^{x}\right)}^{-2}\right)}^{2}}}}{\sqrt{1 + \frac{2}{1 + {\left(e^{x}\right)}^{-2}}}}} \]
    4. Simplified0.0

      \[\leadsto \color{blue}{\frac{\sqrt{\frac{2}{2 + \mathsf{expm1}\left(x \cdot -2\right)} + -1}}{\sqrt{1 + \frac{2}{2 + \mathsf{expm1}\left(x \cdot -2\right)}}} \cdot \sqrt{\frac{4}{{\left(2 + \mathsf{expm1}\left(x \cdot -2\right)\right)}^{2}} + -1}} \]
      Proof

      [Start]0.0

      \[ \frac{\sqrt{\frac{2}{1 + {\left(e^{x}\right)}^{-2}} + -1} \cdot \sqrt{-1 + \frac{4}{{\left(1 + {\left(e^{x}\right)}^{-2}\right)}^{2}}}}{\sqrt{1 + \frac{2}{1 + {\left(e^{x}\right)}^{-2}}}} \]

      associate-/l* [=>]0.0

      \[ \color{blue}{\frac{\sqrt{\frac{2}{1 + {\left(e^{x}\right)}^{-2}} + -1}}{\frac{\sqrt{1 + \frac{2}{1 + {\left(e^{x}\right)}^{-2}}}}{\sqrt{-1 + \frac{4}{{\left(1 + {\left(e^{x}\right)}^{-2}\right)}^{2}}}}}} \]

      associate-/r/ [=>]0.0

      \[ \color{blue}{\frac{\sqrt{\frac{2}{1 + {\left(e^{x}\right)}^{-2}} + -1}}{\sqrt{1 + \frac{2}{1 + {\left(e^{x}\right)}^{-2}}}} \cdot \sqrt{-1 + \frac{4}{{\left(1 + {\left(e^{x}\right)}^{-2}\right)}^{2}}}} \]

    if -0.050000000000000003 < (*.f64 -2 x) < 1e-8

    1. Initial program 59.5

      \[\frac{2}{1 + e^{-2 \cdot x}} - 1 \]
    2. Simplified59.5

      \[\leadsto \color{blue}{\frac{2}{1 + {\left(e^{x}\right)}^{-2}} + -1} \]
      Proof

      [Start]59.5

      \[ \frac{2}{1 + e^{-2 \cdot x}} - 1 \]

      sub-neg [=>]59.5

      \[ \color{blue}{\frac{2}{1 + e^{-2 \cdot x}} + \left(-1\right)} \]

      *-commutative [=>]59.5

      \[ \frac{2}{1 + e^{\color{blue}{x \cdot -2}}} + \left(-1\right) \]

      exp-prod [=>]59.5

      \[ \frac{2}{1 + \color{blue}{{\left(e^{x}\right)}^{-2}}} + \left(-1\right) \]

      metadata-eval [=>]59.5

      \[ \frac{2}{1 + {\left(e^{x}\right)}^{-2}} + \color{blue}{-1} \]
    3. Taylor expanded in x around 0 0.0

      \[\leadsto \color{blue}{-0.3333333333333333 \cdot {x}^{3} + \left(0.13333333333333333 \cdot {x}^{5} + x\right)} \]

    if 1e-8 < (*.f64 -2 x)

    1. Initial program 0.3

      \[\frac{2}{1 + e^{-2 \cdot x}} - 1 \]
    2. Taylor expanded in x around 0 2.2

      \[\leadsto \frac{2}{\color{blue}{2 + -2 \cdot x}} - 1 \]
    3. Simplified2.2

      \[\leadsto \frac{2}{\color{blue}{2 + x \cdot -2}} - 1 \]
      Proof

      [Start]2.2

      \[ \frac{2}{2 + -2 \cdot x} - 1 \]

      *-commutative [=>]2.2

      \[ \frac{2}{2 + \color{blue}{x \cdot -2}} - 1 \]
    4. Taylor expanded in x around inf 1.6

      \[\leadsto \color{blue}{-1} \]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;-2 \cdot x \leq -0.05:\\ \;\;\;\;\frac{\sqrt{\frac{2}{2 + \mathsf{expm1}\left(-2 \cdot x\right)} + -1}}{\sqrt{\frac{2}{2 + \mathsf{expm1}\left(-2 \cdot x\right)} + 1}} \cdot \sqrt{-1 + \frac{4}{{\left(2 + \mathsf{expm1}\left(-2 \cdot x\right)\right)}^{2}}}\\ \mathbf{elif}\;-2 \cdot x \leq 10^{-8}:\\ \;\;\;\;-0.3333333333333333 \cdot {x}^{3} + \left(x + 0.13333333333333333 \cdot {x}^{5}\right)\\ \mathbf{else}:\\ \;\;\;\;-1\\ \end{array} \]

Alternatives

Alternative 1
Error0.4
Cost27780
\[\begin{array}{l} t_0 := 2 + \mathsf{expm1}\left(-2 \cdot x\right)\\ \mathbf{if}\;-2 \cdot x \leq -0.05:\\ \;\;\;\;\frac{4}{\left(\frac{2}{t_0} + 1\right) \cdot {t_0}^{2}} + \frac{1}{-1 + \frac{-2}{t_0}}\\ \mathbf{elif}\;-2 \cdot x \leq 10^{-8}:\\ \;\;\;\;-0.3333333333333333 \cdot {x}^{3} + \left(x + 0.13333333333333333 \cdot {x}^{5}\right)\\ \mathbf{else}:\\ \;\;\;\;-1\\ \end{array} \]
Alternative 2
Error0.4
Cost20740
\[\begin{array}{l} t_0 := 2 + \mathsf{expm1}\left(-2 \cdot x\right)\\ \mathbf{if}\;-2 \cdot x \leq -0.05:\\ \;\;\;\;\frac{-1 + \frac{4}{{t_0}^{2}}}{\frac{2}{t_0} + 1}\\ \mathbf{elif}\;-2 \cdot x \leq 10^{-8}:\\ \;\;\;\;-0.3333333333333333 \cdot {x}^{3} + \left(x + 0.13333333333333333 \cdot {x}^{5}\right)\\ \mathbf{else}:\\ \;\;\;\;-1\\ \end{array} \]
Alternative 3
Error0.4
Cost14024
\[\begin{array}{l} \mathbf{if}\;-2 \cdot x \leq -0.05:\\ \;\;\;\;\frac{2}{2 + \mathsf{expm1}\left(-2 \cdot x\right)} + -1\\ \mathbf{elif}\;-2 \cdot x \leq 10^{-8}:\\ \;\;\;\;-0.3333333333333333 \cdot {x}^{3} + \left(x + 0.13333333333333333 \cdot {x}^{5}\right)\\ \mathbf{else}:\\ \;\;\;\;-1\\ \end{array} \]
Alternative 4
Error0.4
Cost7236
\[\begin{array}{l} \mathbf{if}\;-2 \cdot x \leq -0.001:\\ \;\;\;\;\frac{2}{2 + \mathsf{expm1}\left(-2 \cdot x\right)} + -1\\ \mathbf{elif}\;-2 \cdot x \leq 10^{-8}:\\ \;\;\;\;x + \left(x \cdot x\right) \cdot \left(x \cdot -0.3333333333333333\right)\\ \mathbf{else}:\\ \;\;\;\;-1\\ \end{array} \]
Alternative 5
Error13.3
Cost708
\[\begin{array}{l} \mathbf{if}\;x \leq -0.66:\\ \;\;\;\;-1\\ \mathbf{else}:\\ \;\;\;\;\left(x \cdot 2\right) \cdot \frac{1}{x + 2}\\ \end{array} \]
Alternative 6
Error13.0
Cost584
\[\begin{array}{l} \mathbf{if}\;x \leq -1:\\ \;\;\;\;-1\\ \mathbf{elif}\;x \leq 2.55:\\ \;\;\;\;x\\ \mathbf{else}:\\ \;\;\;\;2 + \frac{-4}{x}\\ \end{array} \]
Alternative 7
Error13.0
Cost328
\[\begin{array}{l} \mathbf{if}\;x \leq -1:\\ \;\;\;\;-1\\ \mathbf{elif}\;x \leq 2:\\ \;\;\;\;x\\ \mathbf{else}:\\ \;\;\;\;2\\ \end{array} \]
Alternative 8
Error42.7
Cost196
\[\begin{array}{l} \mathbf{if}\;x \leq 1.1 \cdot 10^{-308}:\\ \;\;\;\;-1\\ \mathbf{else}:\\ \;\;\;\;2\\ \end{array} \]
Alternative 9
Error45.9
Cost64
\[-1 \]

Error

Reproduce

herbie shell --seed 2023017 
(FPCore (x y)
  :name "Logistic function from Lakshay Garg"
  :precision binary64
  (- (/ 2.0 (+ 1.0 (exp (* -2.0 x)))) 1.0))