Average Error: 13.8 → 1.0
Time: 11.0s
Precision: 64
\[wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\]
\[\frac{\frac{x}{e^{wj}}}{1 + wj} - \left({wj}^{3} - \mathsf{fma}\left(wj, wj, {wj}^{4}\right)\right)\]
wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}
\frac{\frac{x}{e^{wj}}}{1 + wj} - \left({wj}^{3} - \mathsf{fma}\left(wj, wj, {wj}^{4}\right)\right)
double f(double wj, double x) {
        double r283770 = wj;
        double r283771 = exp(r283770);
        double r283772 = r283770 * r283771;
        double r283773 = x;
        double r283774 = r283772 - r283773;
        double r283775 = r283771 + r283772;
        double r283776 = r283774 / r283775;
        double r283777 = r283770 - r283776;
        return r283777;
}

double f(double wj, double x) {
        double r283778 = x;
        double r283779 = wj;
        double r283780 = exp(r283779);
        double r283781 = r283778 / r283780;
        double r283782 = 1.0;
        double r283783 = r283782 + r283779;
        double r283784 = r283781 / r283783;
        double r283785 = 3.0;
        double r283786 = pow(r283779, r283785);
        double r283787 = 4.0;
        double r283788 = pow(r283779, r283787);
        double r283789 = fma(r283779, r283779, r283788);
        double r283790 = r283786 - r283789;
        double r283791 = r283784 - r283790;
        return r283791;
}

Error

Bits error versus wj

Bits error versus x

Target

Original13.8
Target13.3
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. Simplified13.3

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

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

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

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

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

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

Reproduce

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