Average Error: 13.8 → 1.0
Time: 19.1s
Precision: 64
\[wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\]
\[\mathsf{fma}\left(wj \cdot \left(wj \cdot wj\right), wj, wj \cdot wj - wj \cdot \left(wj \cdot wj\right)\right) + \frac{x}{wj \cdot e^{wj} + e^{wj}}\]
wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}
\mathsf{fma}\left(wj \cdot \left(wj \cdot wj\right), wj, wj \cdot wj - wj \cdot \left(wj \cdot wj\right)\right) + \frac{x}{wj \cdot e^{wj} + e^{wj}}
double f(double wj, double x) {
        double r6334994 = wj;
        double r6334995 = exp(r6334994);
        double r6334996 = r6334994 * r6334995;
        double r6334997 = x;
        double r6334998 = r6334996 - r6334997;
        double r6334999 = r6334995 + r6334996;
        double r6335000 = r6334998 / r6334999;
        double r6335001 = r6334994 - r6335000;
        return r6335001;
}

double f(double wj, double x) {
        double r6335002 = wj;
        double r6335003 = r6335002 * r6335002;
        double r6335004 = r6335002 * r6335003;
        double r6335005 = r6335003 - r6335004;
        double r6335006 = fma(r6335004, r6335002, r6335005);
        double r6335007 = x;
        double r6335008 = exp(r6335002);
        double r6335009 = r6335002 * r6335008;
        double r6335010 = r6335009 + r6335008;
        double r6335011 = r6335007 / r6335010;
        double r6335012 = r6335006 + r6335011;
        return r6335012;
}

Error

Bits error versus wj

Bits error versus x

Target

Original13.8
Target13.2
Herbie1.0
\[wj - \left(\frac{wj}{wj + 1} - \frac{x}{e^{wj} + wj \cdot e^{wj}}\right)\]

Derivation

  1. Initial program 13.8

    \[wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\]
  2. Using strategy rm
  3. Applied div-sub13.8

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

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

    \[\leadsto \color{blue}{\left(\left({wj}^{2} + {wj}^{4}\right) - {wj}^{3}\right)} + \frac{x}{e^{wj} + wj \cdot e^{wj}}\]
  6. Simplified1.0

    \[\leadsto \color{blue}{\mathsf{fma}\left(\left(wj \cdot wj\right) \cdot wj, wj, wj \cdot wj - \left(wj \cdot wj\right) \cdot wj\right)} + \frac{x}{e^{wj} + wj \cdot e^{wj}}\]
  7. Final simplification1.0

    \[\leadsto \mathsf{fma}\left(wj \cdot \left(wj \cdot wj\right), wj, wj \cdot wj - wj \cdot \left(wj \cdot wj\right)\right) + \frac{x}{wj \cdot e^{wj} + e^{wj}}\]

Reproduce

herbie shell --seed 2019192 +o rules:numerics
(FPCore (wj x)
  :name "Jmat.Real.lambertw, newton loop step"

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

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