Average Error: 13.8 → 1.1
Time: 21.9s
Precision: 64
\[wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\]
\[\frac{\frac{x}{e^{wj}}}{wj + 1} + \mathsf{fma}\left(wj \cdot wj, wj \cdot wj, wj \cdot wj - wj \cdot \left(wj \cdot wj\right)\right)\]
wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}
\frac{\frac{x}{e^{wj}}}{wj + 1} + \mathsf{fma}\left(wj \cdot wj, wj \cdot wj, wj \cdot wj - wj \cdot \left(wj \cdot wj\right)\right)
double f(double wj, double x) {
        double r7939441 = wj;
        double r7939442 = exp(r7939441);
        double r7939443 = r7939441 * r7939442;
        double r7939444 = x;
        double r7939445 = r7939443 - r7939444;
        double r7939446 = r7939442 + r7939443;
        double r7939447 = r7939445 / r7939446;
        double r7939448 = r7939441 - r7939447;
        return r7939448;
}

double f(double wj, double x) {
        double r7939449 = x;
        double r7939450 = wj;
        double r7939451 = exp(r7939450);
        double r7939452 = r7939449 / r7939451;
        double r7939453 = 1.0;
        double r7939454 = r7939450 + r7939453;
        double r7939455 = r7939452 / r7939454;
        double r7939456 = r7939450 * r7939450;
        double r7939457 = r7939450 * r7939456;
        double r7939458 = r7939456 - r7939457;
        double r7939459 = fma(r7939456, r7939456, r7939458);
        double r7939460 = r7939455 + r7939459;
        return r7939460;
}

Error

Bits error versus wj

Bits error versus x

Target

Original13.8
Target13.2
Herbie1.1
\[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.8

    \[\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.1

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

    \[\leadsto \color{blue}{\mathsf{fma}\left(wj \cdot wj, wj \cdot wj, wj \cdot wj - wj \cdot \left(wj \cdot wj\right)\right)} + \frac{x}{e^{wj} + wj \cdot e^{wj}}\]
  7. Using strategy rm
  8. Applied *-un-lft-identity1.1

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

    \[\leadsto \mathsf{fma}\left(wj \cdot wj, wj \cdot wj, wj \cdot wj - wj \cdot \left(wj \cdot wj\right)\right) + \frac{x}{\color{blue}{e^{wj} \cdot \left(1 + wj\right)}}\]
  10. Applied associate-/r*1.1

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

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

Reproduce

herbie shell --seed 2019164 +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))))))