Average Error: 13.6 → 0.3
Time: 15.1s
Precision: 64
\[wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\]
\[\begin{array}{l} \mathbf{if}\;wj \le 1.040345947896898181868688415541157610278 \cdot 10^{-4}:\\ \;\;\;\;\left(\mathsf{fma}\left(wj, wj, {wj}^{4}\right) - {wj}^{3}\right) + \frac{\frac{x}{e^{wj}}}{1 + wj}\\ \mathbf{else}:\\ \;\;\;\;\left(\mathsf{fma}\left(\frac{wj}{\mathsf{fma}\left(wj, -wj, 1\right)}, wj - 1, wj\right) + \frac{wj}{\mathsf{fma}\left(wj, -wj, 1\right)} \cdot \left(\left(wj - 1\right) + \left(1 - wj\right)\right)\right) + \frac{\frac{x}{e^{wj}}}{1 + wj}\\ \end{array}\]
wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}
\begin{array}{l}
\mathbf{if}\;wj \le 1.040345947896898181868688415541157610278 \cdot 10^{-4}:\\
\;\;\;\;\left(\mathsf{fma}\left(wj, wj, {wj}^{4}\right) - {wj}^{3}\right) + \frac{\frac{x}{e^{wj}}}{1 + wj}\\

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

\end{array}
double f(double wj, double x) {
        double r240224 = wj;
        double r240225 = exp(r240224);
        double r240226 = r240224 * r240225;
        double r240227 = x;
        double r240228 = r240226 - r240227;
        double r240229 = r240225 + r240226;
        double r240230 = r240228 / r240229;
        double r240231 = r240224 - r240230;
        return r240231;
}

double f(double wj, double x) {
        double r240232 = wj;
        double r240233 = 0.00010403459478968982;
        bool r240234 = r240232 <= r240233;
        double r240235 = 4.0;
        double r240236 = pow(r240232, r240235);
        double r240237 = fma(r240232, r240232, r240236);
        double r240238 = 3.0;
        double r240239 = pow(r240232, r240238);
        double r240240 = r240237 - r240239;
        double r240241 = x;
        double r240242 = exp(r240232);
        double r240243 = r240241 / r240242;
        double r240244 = 1.0;
        double r240245 = r240244 + r240232;
        double r240246 = r240243 / r240245;
        double r240247 = r240240 + r240246;
        double r240248 = -r240232;
        double r240249 = fma(r240232, r240248, r240244);
        double r240250 = r240232 / r240249;
        double r240251 = r240232 - r240244;
        double r240252 = fma(r240250, r240251, r240232);
        double r240253 = r240244 - r240232;
        double r240254 = r240251 + r240253;
        double r240255 = r240250 * r240254;
        double r240256 = r240252 + r240255;
        double r240257 = r240256 + r240246;
        double r240258 = r240234 ? r240247 : r240257;
        return r240258;
}

Error

Bits error versus wj

Bits error versus x

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 2 regimes
  2. if wj < 0.00010403459478968982

    1. Initial program 13.2

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

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

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

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

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

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

    if 0.00010403459478968982 < wj

    1. Initial program 32.6

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

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

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

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

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

      \[\leadsto \left(wj - \color{blue}{\frac{wj}{1 \cdot 1 - wj \cdot wj} \cdot \left(1 - wj\right)}\right) + \frac{\frac{x}{e^{wj}}}{1 + wj}\]
    9. Applied add-cube-cbrt2.0

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

      \[\leadsto \color{blue}{\left(\mathsf{fma}\left(\sqrt[3]{wj} \cdot \sqrt[3]{wj}, \sqrt[3]{wj}, -\left(1 - wj\right) \cdot \frac{wj}{1 \cdot 1 - wj \cdot wj}\right) + \mathsf{fma}\left(-\left(1 - wj\right), \frac{wj}{1 \cdot 1 - wj \cdot wj}, \left(1 - wj\right) \cdot \frac{wj}{1 \cdot 1 - wj \cdot wj}\right)\right)} + \frac{\frac{x}{e^{wj}}}{1 + wj}\]
    11. Simplified0.9

      \[\leadsto \left(\color{blue}{\mathsf{fma}\left(\frac{wj}{\mathsf{fma}\left(wj, -wj, 1\right)}, wj - 1, wj\right)} + \mathsf{fma}\left(-\left(1 - wj\right), \frac{wj}{1 \cdot 1 - wj \cdot wj}, \left(1 - wj\right) \cdot \frac{wj}{1 \cdot 1 - wj \cdot wj}\right)\right) + \frac{\frac{x}{e^{wj}}}{1 + wj}\]
    12. Simplified0.9

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;wj \le 1.040345947896898181868688415541157610278 \cdot 10^{-4}:\\ \;\;\;\;\left(\mathsf{fma}\left(wj, wj, {wj}^{4}\right) - {wj}^{3}\right) + \frac{\frac{x}{e^{wj}}}{1 + wj}\\ \mathbf{else}:\\ \;\;\;\;\left(\mathsf{fma}\left(\frac{wj}{\mathsf{fma}\left(wj, -wj, 1\right)}, wj - 1, wj\right) + \frac{wj}{\mathsf{fma}\left(wj, -wj, 1\right)} \cdot \left(\left(wj - 1\right) + \left(1 - wj\right)\right)\right) + \frac{\frac{x}{e^{wj}}}{1 + wj}\\ \end{array}\]

Reproduce

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