?

Average Accuracy: 77.9% → 98.2%
Time: 13.9s
Precision: binary64
Cost: 59652

?

\[wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}} \]
\[\begin{array}{l} t_0 := \sqrt[3]{wj + -1}\\ t_1 := x \cdot -4 + x \cdot 1.5\\ t_2 := wj \cdot e^{wj}\\ \mathbf{if}\;wj + \frac{x - t_2}{e^{wj} + t_2} \leq 5 \cdot 10^{-15}:\\ \;\;\;\;{wj}^{3} \cdot \left(\left(\left(-1 - -2 \cdot t_1\right) - x \cdot -3\right) - x \cdot 0.6666666666666666\right) + \left(\left(1 - t_1\right) \cdot {wj}^{2} + \left(x + -2 \cdot \left(wj \cdot x\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{\frac{x}{e^{wj}} - wj}{\mathsf{fma}\left(wj, wj, -1\right)} \cdot {t_0}^{2}, t_0, wj\right)\\ \end{array} \]
(FPCore (wj x)
 :precision binary64
 (- wj (/ (- (* wj (exp wj)) x) (+ (exp wj) (* wj (exp wj))))))
(FPCore (wj x)
 :precision binary64
 (let* ((t_0 (cbrt (+ wj -1.0)))
        (t_1 (+ (* x -4.0) (* x 1.5)))
        (t_2 (* wj (exp wj))))
   (if (<= (+ wj (/ (- x t_2) (+ (exp wj) t_2))) 5e-15)
     (+
      (*
       (pow wj 3.0)
       (- (- (- -1.0 (* -2.0 t_1)) (* x -3.0)) (* x 0.6666666666666666)))
      (+ (* (- 1.0 t_1) (pow wj 2.0)) (+ x (* -2.0 (* wj x)))))
     (fma
      (* (/ (- (/ x (exp wj)) wj) (fma wj wj -1.0)) (pow t_0 2.0))
      t_0
      wj))))
double code(double wj, double x) {
	return wj - (((wj * exp(wj)) - x) / (exp(wj) + (wj * exp(wj))));
}
double code(double wj, double x) {
	double t_0 = cbrt((wj + -1.0));
	double t_1 = (x * -4.0) + (x * 1.5);
	double t_2 = wj * exp(wj);
	double tmp;
	if ((wj + ((x - t_2) / (exp(wj) + t_2))) <= 5e-15) {
		tmp = (pow(wj, 3.0) * (((-1.0 - (-2.0 * t_1)) - (x * -3.0)) - (x * 0.6666666666666666))) + (((1.0 - t_1) * pow(wj, 2.0)) + (x + (-2.0 * (wj * x))));
	} else {
		tmp = fma(((((x / exp(wj)) - wj) / fma(wj, wj, -1.0)) * pow(t_0, 2.0)), t_0, wj);
	}
	return tmp;
}
function code(wj, x)
	return Float64(wj - Float64(Float64(Float64(wj * exp(wj)) - x) / Float64(exp(wj) + Float64(wj * exp(wj)))))
end
function code(wj, x)
	t_0 = cbrt(Float64(wj + -1.0))
	t_1 = Float64(Float64(x * -4.0) + Float64(x * 1.5))
	t_2 = Float64(wj * exp(wj))
	tmp = 0.0
	if (Float64(wj + Float64(Float64(x - t_2) / Float64(exp(wj) + t_2))) <= 5e-15)
		tmp = Float64(Float64((wj ^ 3.0) * Float64(Float64(Float64(-1.0 - Float64(-2.0 * t_1)) - Float64(x * -3.0)) - Float64(x * 0.6666666666666666))) + Float64(Float64(Float64(1.0 - t_1) * (wj ^ 2.0)) + Float64(x + Float64(-2.0 * Float64(wj * x)))));
	else
		tmp = fma(Float64(Float64(Float64(Float64(x / exp(wj)) - wj) / fma(wj, wj, -1.0)) * (t_0 ^ 2.0)), t_0, wj);
	end
	return tmp
end
code[wj_, x_] := N[(wj - N[(N[(N[(wj * N[Exp[wj], $MachinePrecision]), $MachinePrecision] - x), $MachinePrecision] / N[(N[Exp[wj], $MachinePrecision] + N[(wj * N[Exp[wj], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[wj_, x_] := Block[{t$95$0 = N[Power[N[(wj + -1.0), $MachinePrecision], 1/3], $MachinePrecision]}, Block[{t$95$1 = N[(N[(x * -4.0), $MachinePrecision] + N[(x * 1.5), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(wj * N[Exp[wj], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[N[(wj + N[(N[(x - t$95$2), $MachinePrecision] / N[(N[Exp[wj], $MachinePrecision] + t$95$2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 5e-15], N[(N[(N[Power[wj, 3.0], $MachinePrecision] * N[(N[(N[(-1.0 - N[(-2.0 * t$95$1), $MachinePrecision]), $MachinePrecision] - N[(x * -3.0), $MachinePrecision]), $MachinePrecision] - N[(x * 0.6666666666666666), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(N[(1.0 - t$95$1), $MachinePrecision] * N[Power[wj, 2.0], $MachinePrecision]), $MachinePrecision] + N[(x + N[(-2.0 * N[(wj * x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[(N[(N[(x / N[Exp[wj], $MachinePrecision]), $MachinePrecision] - wj), $MachinePrecision] / N[(wj * wj + -1.0), $MachinePrecision]), $MachinePrecision] * N[Power[t$95$0, 2.0], $MachinePrecision]), $MachinePrecision] * t$95$0 + wj), $MachinePrecision]]]]]
wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}
\begin{array}{l}
t_0 := \sqrt[3]{wj + -1}\\
t_1 := x \cdot -4 + x \cdot 1.5\\
t_2 := wj \cdot e^{wj}\\
\mathbf{if}\;wj + \frac{x - t_2}{e^{wj} + t_2} \leq 5 \cdot 10^{-15}:\\
\;\;\;\;{wj}^{3} \cdot \left(\left(\left(-1 - -2 \cdot t_1\right) - x \cdot -3\right) - x \cdot 0.6666666666666666\right) + \left(\left(1 - t_1\right) \cdot {wj}^{2} + \left(x + -2 \cdot \left(wj \cdot x\right)\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\frac{x}{e^{wj}} - wj}{\mathsf{fma}\left(wj, wj, -1\right)} \cdot {t_0}^{2}, t_0, wj\right)\\


\end{array}

Error?

Target

Original77.9%
Target78.8%
Herbie98.2%
\[wj - \left(\frac{wj}{wj + 1} - \frac{x}{e^{wj} + wj \cdot e^{wj}}\right) \]

Derivation?

  1. Split input into 2 regimes
  2. if (-.f64 wj (/.f64 (-.f64 (*.f64 wj (exp.f64 wj)) x) (+.f64 (exp.f64 wj) (*.f64 wj (exp.f64 wj))))) < 4.99999999999999999e-15

    1. Initial program 71.3%

      \[wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}} \]
    2. Simplified71.3%

      \[\leadsto \color{blue}{wj + \frac{\frac{x}{e^{wj}} - wj}{wj + 1}} \]
      Proof

      [Start]71.3

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

      sub-neg [=>]71.3

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

      div-sub [=>]71.3

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

      sub-neg [=>]71.3

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

      +-commutative [=>]71.3

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

      distribute-neg-in [=>]71.3

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

      remove-double-neg [=>]71.3

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

      sub-neg [<=]71.3

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

      div-sub [<=]71.3

      \[ wj + \color{blue}{\frac{x - wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}}} \]

      distribute-rgt1-in [=>]71.3

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

      associate-/l/ [<=]71.3

      \[ wj + \color{blue}{\frac{\frac{x - wj \cdot e^{wj}}{e^{wj}}}{wj + 1}} \]
    3. Taylor expanded in wj around 0 98.4%

      \[\leadsto \color{blue}{-1 \cdot \left(\left(0.6666666666666666 \cdot x + \left(-3 \cdot x + \left(1 + -2 \cdot \left(-4 \cdot x + 1.5 \cdot x\right)\right)\right)\right) \cdot {wj}^{3}\right) + \left(\left(1 - \left(-4 \cdot x + 1.5 \cdot x\right)\right) \cdot {wj}^{2} + \left(-2 \cdot \left(wj \cdot x\right) + x\right)\right)} \]

    if 4.99999999999999999e-15 < (-.f64 wj (/.f64 (-.f64 (*.f64 wj (exp.f64 wj)) x) (+.f64 (exp.f64 wj) (*.f64 wj (exp.f64 wj)))))

    1. Initial program 94.6%

      \[wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}} \]
    2. Simplified97.8%

      \[\leadsto \color{blue}{wj + \frac{\frac{x}{e^{wj}} - wj}{wj + 1}} \]
      Proof

      [Start]94.6

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

      sub-neg [=>]94.6

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

      div-sub [=>]94.6

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

      sub-neg [=>]94.6

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

      +-commutative [=>]94.6

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

      distribute-neg-in [=>]94.6

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

      remove-double-neg [=>]94.6

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

      sub-neg [<=]94.6

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

      div-sub [<=]94.6

      \[ wj + \color{blue}{\frac{x - wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}}} \]

      distribute-rgt1-in [=>]94.6

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

      associate-/l/ [<=]94.6

      \[ wj + \color{blue}{\frac{\frac{x - wj \cdot e^{wj}}{e^{wj}}}{wj + 1}} \]
    3. Applied egg-rr97.8%

      \[\leadsto wj + \color{blue}{\frac{\frac{x}{e^{wj}} - wj}{\mathsf{fma}\left(wj, wj, -1\right)} \cdot \left(wj + -1\right)} \]
      Proof

      [Start]97.8

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

      flip-+ [=>]97.8

      \[ wj + \frac{\frac{x}{e^{wj}} - wj}{\color{blue}{\frac{wj \cdot wj - 1 \cdot 1}{wj - 1}}} \]

      associate-/r/ [=>]97.8

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

      metadata-eval [=>]97.8

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

      fma-neg [=>]97.8

      \[ wj + \frac{\frac{x}{e^{wj}} - wj}{\color{blue}{\mathsf{fma}\left(wj, wj, -1\right)}} \cdot \left(wj - 1\right) \]

      metadata-eval [=>]97.8

      \[ wj + \frac{\frac{x}{e^{wj}} - wj}{\mathsf{fma}\left(wj, wj, \color{blue}{-1}\right)} \cdot \left(wj - 1\right) \]

      sub-neg [=>]97.8

      \[ wj + \frac{\frac{x}{e^{wj}} - wj}{\mathsf{fma}\left(wj, wj, -1\right)} \cdot \color{blue}{\left(wj + \left(-1\right)\right)} \]

      metadata-eval [=>]97.8

      \[ wj + \frac{\frac{x}{e^{wj}} - wj}{\mathsf{fma}\left(wj, wj, -1\right)} \cdot \left(wj + \color{blue}{-1}\right) \]
    4. Applied egg-rr97.6%

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{\frac{x}{e^{wj}} - wj}{\mathsf{fma}\left(wj, wj, -1\right)} \cdot {\left(\sqrt[3]{wj - 1}\right)}^{2}, \sqrt[3]{wj - 1}, wj\right)} \]
      Proof

      [Start]97.8

      \[ wj + \frac{\frac{x}{e^{wj}} - wj}{\mathsf{fma}\left(wj, wj, -1\right)} \cdot \left(wj + -1\right) \]

      +-commutative [=>]97.8

      \[ \color{blue}{\frac{\frac{x}{e^{wj}} - wj}{\mathsf{fma}\left(wj, wj, -1\right)} \cdot \left(wj + -1\right) + wj} \]

      add-cube-cbrt [=>]97.6

      \[ \frac{\frac{x}{e^{wj}} - wj}{\mathsf{fma}\left(wj, wj, -1\right)} \cdot \color{blue}{\left(\left(\sqrt[3]{wj + -1} \cdot \sqrt[3]{wj + -1}\right) \cdot \sqrt[3]{wj + -1}\right)} + wj \]

      associate-*r* [=>]97.6

      \[ \color{blue}{\left(\frac{\frac{x}{e^{wj}} - wj}{\mathsf{fma}\left(wj, wj, -1\right)} \cdot \left(\sqrt[3]{wj + -1} \cdot \sqrt[3]{wj + -1}\right)\right) \cdot \sqrt[3]{wj + -1}} + wj \]

      fma-def [=>]97.6

      \[ \color{blue}{\mathsf{fma}\left(\frac{\frac{x}{e^{wj}} - wj}{\mathsf{fma}\left(wj, wj, -1\right)} \cdot \left(\sqrt[3]{wj + -1} \cdot \sqrt[3]{wj + -1}\right), \sqrt[3]{wj + -1}, wj\right)} \]
  3. Recombined 2 regimes into one program.
  4. Final simplification98.2%

    \[\leadsto \begin{array}{l} \mathbf{if}\;wj + \frac{x - wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}} \leq 5 \cdot 10^{-15}:\\ \;\;\;\;{wj}^{3} \cdot \left(\left(\left(-1 - -2 \cdot \left(x \cdot -4 + x \cdot 1.5\right)\right) - x \cdot -3\right) - x \cdot 0.6666666666666666\right) + \left(\left(1 - \left(x \cdot -4 + x \cdot 1.5\right)\right) \cdot {wj}^{2} + \left(x + -2 \cdot \left(wj \cdot x\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{\frac{x}{e^{wj}} - wj}{\mathsf{fma}\left(wj, wj, -1\right)} \cdot {\left(\sqrt[3]{wj + -1}\right)}^{2}, \sqrt[3]{wj + -1}, wj\right)\\ \end{array} \]

Alternatives

Alternative 1
Accuracy98.2%
Cost40132
\[\begin{array}{l} t_0 := x \cdot -4 + x \cdot 1.5\\ t_1 := wj \cdot e^{wj}\\ \mathbf{if}\;wj + \frac{x - t_1}{e^{wj} + t_1} \leq 5 \cdot 10^{-15}:\\ \;\;\;\;{wj}^{3} \cdot \left(\left(\left(-1 - -2 \cdot t_0\right) - x \cdot -3\right) - x \cdot 0.6666666666666666\right) + \left(\left(1 - t_0\right) \cdot {wj}^{2} + \left(x + -2 \cdot \left(wj \cdot x\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{\frac{x}{e^{wj}} - wj}{\mathsf{fma}\left(wj, wj, -1\right)}, wj + -1, wj\right)\\ \end{array} \]
Alternative 2
Accuracy98.2%
Cost35652
\[\begin{array}{l} t_0 := x \cdot -4 + x \cdot 1.5\\ t_1 := wj \cdot e^{wj}\\ \mathbf{if}\;wj + \frac{x - t_1}{e^{wj} + t_1} \leq 5 \cdot 10^{-15}:\\ \;\;\;\;{wj}^{3} \cdot \left(\left(\left(-1 - -2 \cdot t_0\right) - x \cdot -3\right) - x \cdot 0.6666666666666666\right) + \left(\left(1 - t_0\right) \cdot {wj}^{2} + \left(x + -2 \cdot \left(wj \cdot x\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;wj + \frac{x \cdot e^{-wj} - wj}{wj + 1}\\ \end{array} \]
Alternative 3
Accuracy98.0%
Cost7300
\[\begin{array}{l} \mathbf{if}\;wj \leq 1.5 \cdot 10^{-7}:\\ \;\;\;\;\left(\left(x + -2 \cdot \left(wj \cdot x\right)\right) + wj \cdot wj\right) - wj \cdot \left(wj \cdot wj\right)\\ \mathbf{else}:\\ \;\;\;\;wj + \frac{x \cdot e^{-wj} - wj}{wj + 1}\\ \end{array} \]
Alternative 4
Accuracy98.0%
Cost7236
\[\begin{array}{l} \mathbf{if}\;wj \leq 4.7 \cdot 10^{-7}:\\ \;\;\;\;\left(\left(x + -2 \cdot \left(wj \cdot x\right)\right) + wj \cdot wj\right) - wj \cdot \left(wj \cdot wj\right)\\ \mathbf{else}:\\ \;\;\;\;wj - \frac{wj - \frac{x}{e^{wj}}}{wj + 1}\\ \end{array} \]
Alternative 5
Accuracy97.5%
Cost1220
\[\begin{array}{l} \mathbf{if}\;wj \leq 0.086:\\ \;\;\;\;\left(\left(x + -2 \cdot \left(wj \cdot x\right)\right) + wj \cdot wj\right) - wj \cdot \left(wj \cdot wj\right)\\ \mathbf{else}:\\ \;\;\;\;wj - \frac{wj}{wj + 1}\\ \end{array} \]
Alternative 6
Accuracy86.1%
Cost708
\[\begin{array}{l} \mathbf{if}\;wj \leq 3.8 \cdot 10^{-9}:\\ \;\;\;\;x \cdot \frac{1 - wj}{wj + 1}\\ \mathbf{else}:\\ \;\;\;\;wj - \frac{wj}{wj + 1}\\ \end{array} \]
Alternative 7
Accuracy84.0%
Cost580
\[\begin{array}{l} \mathbf{if}\;x \leq 1.25 \cdot 10^{-225}:\\ \;\;\;\;x + -2 \cdot \left(wj \cdot x\right)\\ \mathbf{elif}\;x \leq 4.8 \cdot 10^{-198}:\\ \;\;\;\;wj \cdot wj\\ \mathbf{else}:\\ \;\;\;\;x\\ \end{array} \]
Alternative 8
Accuracy86.0%
Cost580
\[\begin{array}{l} \mathbf{if}\;wj \leq 4.2 \cdot 10^{-10}:\\ \;\;\;\;x + -2 \cdot \left(wj \cdot x\right)\\ \mathbf{else}:\\ \;\;\;\;wj - \frac{wj}{wj + 1}\\ \end{array} \]
Alternative 9
Accuracy86.1%
Cost580
\[\begin{array}{l} \mathbf{if}\;wj \leq 3.8 \cdot 10^{-8}:\\ \;\;\;\;\frac{x}{1 + wj \cdot 2}\\ \mathbf{else}:\\ \;\;\;\;wj - \frac{wj}{wj + 1}\\ \end{array} \]
Alternative 10
Accuracy83.8%
Cost456
\[\begin{array}{l} \mathbf{if}\;x \leq 10^{-225}:\\ \;\;\;\;x\\ \mathbf{elif}\;x \leq 4.8 \cdot 10^{-198}:\\ \;\;\;\;wj \cdot wj\\ \mathbf{else}:\\ \;\;\;\;x\\ \end{array} \]
Alternative 11
Accuracy4.4%
Cost64
\[wj \]
Alternative 12
Accuracy84.3%
Cost64
\[x \]

Error

Reproduce?

herbie shell --seed 2023153 
(FPCore (wj x)
  :name "Jmat.Real.lambertw, newton loop step"
  :precision binary64

  :herbie-target
  (- wj (- (/ wj (+ wj 1.0)) (/ x (+ (exp wj) (* wj (exp wj))))))

  (- wj (/ (- (* wj (exp wj)) x) (+ (exp wj) (* wj (exp wj))))))