Average Error: 13.9 → 0.5
Time: 18.1s
Precision: 64
\[wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\]
\[\begin{array}{l} \mathbf{if}\;wj \le 0.0756709219093340962:\\ \;\;\;\;\frac{\frac{x}{e^{wj}}}{wj + 1} - \left({wj}^{3} - \left({wj}^{4} + {wj}^{2}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{\sqrt[3]{{\left(\frac{x}{e^{wj}}\right)}^{3}}}{wj + 1} - \left(\frac{wj}{wj + 1} - wj\right)\\ \end{array}\]
wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}
\begin{array}{l}
\mathbf{if}\;wj \le 0.0756709219093340962:\\
\;\;\;\;\frac{\frac{x}{e^{wj}}}{wj + 1} - \left({wj}^{3} - \left({wj}^{4} + {wj}^{2}\right)\right)\\

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

\end{array}
double f(double wj, double x) {
        double r274063 = wj;
        double r274064 = exp(r274063);
        double r274065 = r274063 * r274064;
        double r274066 = x;
        double r274067 = r274065 - r274066;
        double r274068 = r274064 + r274065;
        double r274069 = r274067 / r274068;
        double r274070 = r274063 - r274069;
        return r274070;
}

double f(double wj, double x) {
        double r274071 = wj;
        double r274072 = 0.0756709219093341;
        bool r274073 = r274071 <= r274072;
        double r274074 = x;
        double r274075 = exp(r274071);
        double r274076 = r274074 / r274075;
        double r274077 = 1.0;
        double r274078 = r274071 + r274077;
        double r274079 = r274076 / r274078;
        double r274080 = 3.0;
        double r274081 = pow(r274071, r274080);
        double r274082 = 4.0;
        double r274083 = pow(r274071, r274082);
        double r274084 = 2.0;
        double r274085 = pow(r274071, r274084);
        double r274086 = r274083 + r274085;
        double r274087 = r274081 - r274086;
        double r274088 = r274079 - r274087;
        double r274089 = pow(r274076, r274080);
        double r274090 = cbrt(r274089);
        double r274091 = r274090 / r274078;
        double r274092 = r274071 / r274078;
        double r274093 = r274092 - r274071;
        double r274094 = r274091 - r274093;
        double r274095 = r274073 ? r274088 : r274094;
        return r274095;
}

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.9
Target13.2
Herbie0.5
\[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 < 0.0756709219093341

    1. Initial program 13.5

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

      \[\leadsto \color{blue}{\frac{\frac{x}{e^{wj}} - wj}{wj + 1} + wj}\]
    3. Using strategy rm
    4. Applied div-sub13.5

      \[\leadsto \color{blue}{\left(\frac{\frac{x}{e^{wj}}}{wj + 1} - \frac{wj}{wj + 1}\right)} + wj\]
    5. Applied associate-+l-7.1

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

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

    if 0.0756709219093341 < wj

    1. Initial program 35.5

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

      \[\leadsto \color{blue}{\frac{\frac{x}{e^{wj}} - wj}{wj + 1} + wj}\]
    3. Using strategy rm
    4. Applied div-sub0.2

      \[\leadsto \color{blue}{\left(\frac{\frac{x}{e^{wj}}}{wj + 1} - \frac{wj}{wj + 1}\right)} + wj\]
    5. Applied associate-+l-0.2

      \[\leadsto \color{blue}{\frac{\frac{x}{e^{wj}}}{wj + 1} - \left(\frac{wj}{wj + 1} - wj\right)}\]
    6. Using strategy rm
    7. Applied add-cbrt-cube1.2

      \[\leadsto \frac{\frac{x}{\color{blue}{\sqrt[3]{\left(e^{wj} \cdot e^{wj}\right) \cdot e^{wj}}}}}{wj + 1} - \left(\frac{wj}{wj + 1} - wj\right)\]
    8. Applied add-cbrt-cube21.9

      \[\leadsto \frac{\frac{\color{blue}{\sqrt[3]{\left(x \cdot x\right) \cdot x}}}{\sqrt[3]{\left(e^{wj} \cdot e^{wj}\right) \cdot e^{wj}}}}{wj + 1} - \left(\frac{wj}{wj + 1} - wj\right)\]
    9. Applied cbrt-undiv21.9

      \[\leadsto \frac{\color{blue}{\sqrt[3]{\frac{\left(x \cdot x\right) \cdot x}{\left(e^{wj} \cdot e^{wj}\right) \cdot e^{wj}}}}}{wj + 1} - \left(\frac{wj}{wj + 1} - wj\right)\]
    10. Simplified7.6

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

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

Reproduce

herbie shell --seed 2020043 
(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))))))