Average Error: 13.7 → 1.8
Time: 25.6s
Precision: 64
\[wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\]
\[\begin{array}{l} \mathbf{if}\;x \le 6.814864601083122 \cdot 10^{-38}:\\ \;\;\;\;x + \left(wj \cdot wj - \left(wj + wj\right) \cdot x\right)\\ \mathbf{else}:\\ \;\;\;\;\left(wj - e^{wj} \cdot \frac{wj \cdot e^{wj} - x}{\left(e^{wj} - wj \cdot e^{wj}\right) \cdot \left(wj \cdot e^{wj} + e^{wj}\right)}\right) - \left(-\frac{wj \cdot e^{wj} - x}{\left(e^{wj} - wj \cdot e^{wj}\right) \cdot \left(wj \cdot e^{wj} + e^{wj}\right)}\right) \cdot \left(wj \cdot e^{wj}\right)\\ \end{array}\]
wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}
\begin{array}{l}
\mathbf{if}\;x \le 6.814864601083122 \cdot 10^{-38}:\\
\;\;\;\;x + \left(wj \cdot wj - \left(wj + wj\right) \cdot x\right)\\

\mathbf{else}:\\
\;\;\;\;\left(wj - e^{wj} \cdot \frac{wj \cdot e^{wj} - x}{\left(e^{wj} - wj \cdot e^{wj}\right) \cdot \left(wj \cdot e^{wj} + e^{wj}\right)}\right) - \left(-\frac{wj \cdot e^{wj} - x}{\left(e^{wj} - wj \cdot e^{wj}\right) \cdot \left(wj \cdot e^{wj} + e^{wj}\right)}\right) \cdot \left(wj \cdot e^{wj}\right)\\

\end{array}
double f(double wj, double x) {
        double r9318539 = wj;
        double r9318540 = exp(r9318539);
        double r9318541 = r9318539 * r9318540;
        double r9318542 = x;
        double r9318543 = r9318541 - r9318542;
        double r9318544 = r9318540 + r9318541;
        double r9318545 = r9318543 / r9318544;
        double r9318546 = r9318539 - r9318545;
        return r9318546;
}

double f(double wj, double x) {
        double r9318547 = x;
        double r9318548 = 6.814864601083122e-38;
        bool r9318549 = r9318547 <= r9318548;
        double r9318550 = wj;
        double r9318551 = r9318550 * r9318550;
        double r9318552 = r9318550 + r9318550;
        double r9318553 = r9318552 * r9318547;
        double r9318554 = r9318551 - r9318553;
        double r9318555 = r9318547 + r9318554;
        double r9318556 = exp(r9318550);
        double r9318557 = r9318550 * r9318556;
        double r9318558 = r9318557 - r9318547;
        double r9318559 = r9318556 - r9318557;
        double r9318560 = r9318557 + r9318556;
        double r9318561 = r9318559 * r9318560;
        double r9318562 = r9318558 / r9318561;
        double r9318563 = r9318556 * r9318562;
        double r9318564 = r9318550 - r9318563;
        double r9318565 = -r9318562;
        double r9318566 = r9318565 * r9318557;
        double r9318567 = r9318564 - r9318566;
        double r9318568 = r9318549 ? r9318555 : r9318567;
        return r9318568;
}

Error

Bits error versus wj

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original13.7
Target13.0
Herbie1.8
\[wj - \left(\frac{wj}{wj + 1} - \frac{x}{e^{wj} + wj \cdot e^{wj}}\right)\]

Derivation

  1. Split input into 2 regimes
  2. if x < 6.814864601083122e-38

    1. Initial program 18.7

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

      \[\leadsto \color{blue}{\left({wj}^{2} + x\right) - 2 \cdot \left(x \cdot wj\right)}\]
    3. Simplified2.2

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

    if 6.814864601083122e-38 < x

    1. Initial program 0.7

      \[wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\]
    2. Using strategy rm
    3. Applied flip-+0.8

      \[\leadsto wj - \frac{wj \cdot e^{wj} - x}{\color{blue}{\frac{e^{wj} \cdot e^{wj} - \left(wj \cdot e^{wj}\right) \cdot \left(wj \cdot e^{wj}\right)}{e^{wj} - wj \cdot e^{wj}}}}\]
    4. Applied associate-/r/0.8

      \[\leadsto wj - \color{blue}{\frac{wj \cdot e^{wj} - x}{e^{wj} \cdot e^{wj} - \left(wj \cdot e^{wj}\right) \cdot \left(wj \cdot e^{wj}\right)} \cdot \left(e^{wj} - wj \cdot e^{wj}\right)}\]
    5. Simplified0.8

      \[\leadsto wj - \color{blue}{\frac{wj \cdot e^{wj} - x}{\left(e^{wj} + wj \cdot e^{wj}\right) \cdot \left(e^{wj} - wj \cdot e^{wj}\right)}} \cdot \left(e^{wj} - wj \cdot e^{wj}\right)\]
    6. Using strategy rm
    7. Applied sub-neg0.8

      \[\leadsto wj - \frac{wj \cdot e^{wj} - x}{\left(e^{wj} + wj \cdot e^{wj}\right) \cdot \left(e^{wj} - wj \cdot e^{wj}\right)} \cdot \color{blue}{\left(e^{wj} + \left(-wj \cdot e^{wj}\right)\right)}\]
    8. Applied distribute-lft-in0.8

      \[\leadsto wj - \color{blue}{\left(\frac{wj \cdot e^{wj} - x}{\left(e^{wj} + wj \cdot e^{wj}\right) \cdot \left(e^{wj} - wj \cdot e^{wj}\right)} \cdot e^{wj} + \frac{wj \cdot e^{wj} - x}{\left(e^{wj} + wj \cdot e^{wj}\right) \cdot \left(e^{wj} - wj \cdot e^{wj}\right)} \cdot \left(-wj \cdot e^{wj}\right)\right)}\]
    9. Applied associate--r+0.8

      \[\leadsto \color{blue}{\left(wj - \frac{wj \cdot e^{wj} - x}{\left(e^{wj} + wj \cdot e^{wj}\right) \cdot \left(e^{wj} - wj \cdot e^{wj}\right)} \cdot e^{wj}\right) - \frac{wj \cdot e^{wj} - x}{\left(e^{wj} + wj \cdot e^{wj}\right) \cdot \left(e^{wj} - wj \cdot e^{wj}\right)} \cdot \left(-wj \cdot e^{wj}\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 6.814864601083122 \cdot 10^{-38}:\\ \;\;\;\;x + \left(wj \cdot wj - \left(wj + wj\right) \cdot x\right)\\ \mathbf{else}:\\ \;\;\;\;\left(wj - e^{wj} \cdot \frac{wj \cdot e^{wj} - x}{\left(e^{wj} - wj \cdot e^{wj}\right) \cdot \left(wj \cdot e^{wj} + e^{wj}\right)}\right) - \left(-\frac{wj \cdot e^{wj} - x}{\left(e^{wj} - wj \cdot e^{wj}\right) \cdot \left(wj \cdot e^{wj} + e^{wj}\right)}\right) \cdot \left(wj \cdot e^{wj}\right)\\ \end{array}\]

Reproduce

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

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

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