Average Error: 13.6 → 1.0
Time: 10.2s
Precision: 64
\[wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\]
\[\begin{array}{l} \mathbf{if}\;wj \le 7.40731419406560759 \cdot 10^{-9}:\\ \;\;\;\;\left(x + {wj}^{2}\right) - 2 \cdot \left(wj \cdot x\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{\frac{x}{{wj}^{3} + 1}}{\frac{e^{wj}}{wj \cdot wj + \left(1 - wj \cdot 1\right)}} + wj\right) - \frac{wj}{wj + 1}\\ \end{array}\]
wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}
\begin{array}{l}
\mathbf{if}\;wj \le 7.40731419406560759 \cdot 10^{-9}:\\
\;\;\;\;\left(x + {wj}^{2}\right) - 2 \cdot \left(wj \cdot x\right)\\

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

\end{array}
double f(double wj, double x) {
        double r235845 = wj;
        double r235846 = exp(r235845);
        double r235847 = r235845 * r235846;
        double r235848 = x;
        double r235849 = r235847 - r235848;
        double r235850 = r235846 + r235847;
        double r235851 = r235849 / r235850;
        double r235852 = r235845 - r235851;
        return r235852;
}

double f(double wj, double x) {
        double r235853 = wj;
        double r235854 = 7.4073141940656076e-09;
        bool r235855 = r235853 <= r235854;
        double r235856 = x;
        double r235857 = 2.0;
        double r235858 = pow(r235853, r235857);
        double r235859 = r235856 + r235858;
        double r235860 = r235853 * r235856;
        double r235861 = r235857 * r235860;
        double r235862 = r235859 - r235861;
        double r235863 = 3.0;
        double r235864 = pow(r235853, r235863);
        double r235865 = 1.0;
        double r235866 = r235864 + r235865;
        double r235867 = r235856 / r235866;
        double r235868 = exp(r235853);
        double r235869 = r235853 * r235853;
        double r235870 = r235853 * r235865;
        double r235871 = r235865 - r235870;
        double r235872 = r235869 + r235871;
        double r235873 = r235868 / r235872;
        double r235874 = r235867 / r235873;
        double r235875 = r235874 + r235853;
        double r235876 = r235853 + r235865;
        double r235877 = r235853 / r235876;
        double r235878 = r235875 - r235877;
        double r235879 = r235855 ? r235862 : r235878;
        return r235879;
}

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.6
Target13.0
Herbie1.0
\[wj - \left(\frac{wj}{wj + 1} - \frac{x}{e^{wj} + wj \cdot e^{wj}}\right)\]

Derivation

  1. Split input into 2 regimes
  2. if wj < 7.4073141940656076e-09

    1. Initial program 13.3

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

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

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

    if 7.4073141940656076e-09 < wj

    1. Initial program 22.9

      \[wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\]
    2. Simplified3.5

      \[\leadsto \color{blue}{\left(\frac{\frac{x}{wj + 1}}{e^{wj}} + wj\right) - \frac{wj}{wj + 1}}\]
    3. Using strategy rm
    4. Applied flip3-+3.5

      \[\leadsto \left(\frac{\frac{x}{\color{blue}{\frac{{wj}^{3} + {1}^{3}}{wj \cdot wj + \left(1 \cdot 1 - wj \cdot 1\right)}}}}{e^{wj}} + wj\right) - \frac{wj}{wj + 1}\]
    5. Applied associate-/r/3.5

      \[\leadsto \left(\frac{\color{blue}{\frac{x}{{wj}^{3} + {1}^{3}} \cdot \left(wj \cdot wj + \left(1 \cdot 1 - wj \cdot 1\right)\right)}}{e^{wj}} + wj\right) - \frac{wj}{wj + 1}\]
    6. Applied associate-/l*3.5

      \[\leadsto \left(\color{blue}{\frac{\frac{x}{{wj}^{3} + {1}^{3}}}{\frac{e^{wj}}{wj \cdot wj + \left(1 \cdot 1 - wj \cdot 1\right)}}} + wj\right) - \frac{wj}{wj + 1}\]
    7. Simplified3.5

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

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

Reproduce

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

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

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