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

\mathbf{elif}\;wj \le 9.705982152869647827141704030020491478226 \cdot 10^{-9}:\\
\;\;\;\;\left(x + {wj}^{2}\right) - 2 \cdot \left(wj \cdot x\right)\\

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

\end{array}
double f(double wj, double x) {
        double r163938 = wj;
        double r163939 = exp(r163938);
        double r163940 = r163938 * r163939;
        double r163941 = x;
        double r163942 = r163940 - r163941;
        double r163943 = r163939 + r163940;
        double r163944 = r163942 / r163943;
        double r163945 = r163938 - r163944;
        return r163945;
}

double f(double wj, double x) {
        double r163946 = wj;
        double r163947 = -3.018517982554952e-09;
        bool r163948 = r163946 <= r163947;
        double r163949 = x;
        double r163950 = exp(r163946);
        double r163951 = r163949 / r163950;
        double r163952 = r163951 - r163946;
        double r163953 = 3.0;
        double r163954 = pow(r163946, r163953);
        double r163955 = 1.0;
        double r163956 = pow(r163955, r163953);
        double r163957 = r163954 + r163956;
        double r163958 = r163952 / r163957;
        double r163959 = r163946 * r163946;
        double r163960 = r163946 * r163955;
        double r163961 = r163955 - r163960;
        double r163962 = r163959 + r163961;
        double r163963 = r163958 * r163962;
        double r163964 = r163963 + r163946;
        double r163965 = 9.705982152869648e-09;
        bool r163966 = r163946 <= r163965;
        double r163967 = 2.0;
        double r163968 = pow(r163946, r163967);
        double r163969 = r163949 + r163968;
        double r163970 = r163946 * r163949;
        double r163971 = r163967 * r163970;
        double r163972 = r163969 - r163971;
        double r163973 = r163946 + r163955;
        double r163974 = r163955 / r163973;
        double r163975 = pow(r163974, r163953);
        double r163976 = cbrt(r163975);
        double r163977 = r163952 * r163976;
        double r163978 = r163977 + r163946;
        double r163979 = r163966 ? r163972 : r163978;
        double r163980 = r163948 ? r163964 : r163979;
        return r163980;
}

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
Target12.9
Herbie0.3
\[wj - \left(\frac{wj}{wj + 1} - \frac{x}{e^{wj} + wj \cdot e^{wj}}\right)\]

Derivation

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

    1. Initial program 4.9

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

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

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

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

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

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

    if -3.018517982554952e-09 < wj < 9.705982152869648e-09

    1. Initial program 13.4

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

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

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

    if 9.705982152869648e-09 < wj

    1. Initial program 27.0

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

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

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

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

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

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

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

Reproduce

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