Average Error: 14.0 → 0.9
Time: 2.0m
Precision: 64
\[wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\]
\[\begin{array}{l} \mathbf{if}\;wj \le 7.410564643269004 \cdot 10^{-09}:\\ \;\;\;\;(\left((x \cdot -2 + wj)_*\right) \cdot wj + x)_*\\ \mathbf{else}:\\ \;\;\;\;wj - \frac{wj - \frac{x}{e^{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.410564643269004 \cdot 10^{-09}:\\
\;\;\;\;(\left((x \cdot -2 + wj)_*\right) \cdot wj + x)_*\\

\mathbf{else}:\\
\;\;\;\;wj - \frac{wj - \frac{x}{e^{wj}}}{wj + 1}\\

\end{array}
double f(double wj, double x) {
        double r26918078 = wj;
        double r26918079 = exp(r26918078);
        double r26918080 = r26918078 * r26918079;
        double r26918081 = x;
        double r26918082 = r26918080 - r26918081;
        double r26918083 = r26918079 + r26918080;
        double r26918084 = r26918082 / r26918083;
        double r26918085 = r26918078 - r26918084;
        return r26918085;
}

double f(double wj, double x) {
        double r26918086 = wj;
        double r26918087 = 7.410564643269004e-09;
        bool r26918088 = r26918086 <= r26918087;
        double r26918089 = x;
        double r26918090 = -2.0;
        double r26918091 = fma(r26918089, r26918090, r26918086);
        double r26918092 = fma(r26918091, r26918086, r26918089);
        double r26918093 = exp(r26918086);
        double r26918094 = r26918089 / r26918093;
        double r26918095 = r26918086 - r26918094;
        double r26918096 = 1.0;
        double r26918097 = r26918086 + r26918096;
        double r26918098 = r26918095 / r26918097;
        double r26918099 = r26918086 - r26918098;
        double r26918100 = r26918088 ? r26918092 : r26918099;
        return r26918100;
}

Error

Bits error versus wj

Bits error versus x

Target

Original14.0
Target13.4
Herbie0.9
\[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.410564643269004e-09

    1. Initial program 13.7

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

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

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

    if 7.410564643269004e-09 < wj

    1. Initial program 22.1

      \[wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\]
    2. Using strategy rm
    3. Applied add-cube-cbrt22.9

      \[\leadsto wj - \color{blue}{\left(\sqrt[3]{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}} \cdot \sqrt[3]{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}}\right) \cdot \sqrt[3]{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}}}\]
    4. Applied add-cube-cbrt23.2

      \[\leadsto \color{blue}{\left(\sqrt[3]{wj} \cdot \sqrt[3]{wj}\right) \cdot \sqrt[3]{wj}} - \left(\sqrt[3]{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}} \cdot \sqrt[3]{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}}\right) \cdot \sqrt[3]{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}}\]
    5. Applied prod-diff23.2

      \[\leadsto \color{blue}{(\left(\sqrt[3]{wj} \cdot \sqrt[3]{wj}\right) \cdot \left(\sqrt[3]{wj}\right) + \left(-\sqrt[3]{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}} \cdot \left(\sqrt[3]{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}} \cdot \sqrt[3]{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}}\right)\right))_* + (\left(-\sqrt[3]{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}}\right) \cdot \left(\sqrt[3]{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}} \cdot \sqrt[3]{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}}\right) + \left(\sqrt[3]{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}} \cdot \left(\sqrt[3]{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}} \cdot \sqrt[3]{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}}\right)\right))_*}\]
    6. Simplified22.2

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

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

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

Reproduce

herbie shell --seed 2019112 +o rules:numerics
(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))))))