Average Error: 13.1 → 1.2
Time: 18.0s
Precision: 64
\[wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\]
\[\left(\left(wj \cdot wj\right) \cdot \left(wj \cdot wj\right) + \left(wj \cdot wj - wj \cdot \left(wj \cdot wj\right)\right)\right) + \left(e^{wj} - e^{wj} \cdot wj\right) \cdot \frac{x}{e^{wj} \cdot e^{wj} - \left(e^{wj} \cdot wj\right) \cdot \left(e^{wj} \cdot wj\right)}\]
wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}
\left(\left(wj \cdot wj\right) \cdot \left(wj \cdot wj\right) + \left(wj \cdot wj - wj \cdot \left(wj \cdot wj\right)\right)\right) + \left(e^{wj} - e^{wj} \cdot wj\right) \cdot \frac{x}{e^{wj} \cdot e^{wj} - \left(e^{wj} \cdot wj\right) \cdot \left(e^{wj} \cdot wj\right)}
double f(double wj, double x) {
        double r9227187 = wj;
        double r9227188 = exp(r9227187);
        double r9227189 = r9227187 * r9227188;
        double r9227190 = x;
        double r9227191 = r9227189 - r9227190;
        double r9227192 = r9227188 + r9227189;
        double r9227193 = r9227191 / r9227192;
        double r9227194 = r9227187 - r9227193;
        return r9227194;
}

double f(double wj, double x) {
        double r9227195 = wj;
        double r9227196 = r9227195 * r9227195;
        double r9227197 = r9227196 * r9227196;
        double r9227198 = r9227195 * r9227196;
        double r9227199 = r9227196 - r9227198;
        double r9227200 = r9227197 + r9227199;
        double r9227201 = exp(r9227195);
        double r9227202 = r9227201 * r9227195;
        double r9227203 = r9227201 - r9227202;
        double r9227204 = x;
        double r9227205 = r9227201 * r9227201;
        double r9227206 = r9227202 * r9227202;
        double r9227207 = r9227205 - r9227206;
        double r9227208 = r9227204 / r9227207;
        double r9227209 = r9227203 * r9227208;
        double r9227210 = r9227200 + r9227209;
        return r9227210;
}

Error

Bits error versus wj

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

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

Derivation

  1. Initial program 13.1

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

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

    \[\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}{\left(\left(wj \cdot wj\right) \cdot \left(wj \cdot wj\right) + \left(wj \cdot wj - wj \cdot \left(wj \cdot wj\right)\right)\right)} + \frac{x}{e^{wj} + wj \cdot e^{wj}}\]
  7. Using strategy rm
  8. Applied flip-+1.2

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

    \[\leadsto \left(\left(wj \cdot wj\right) \cdot \left(wj \cdot wj\right) + \left(wj \cdot wj - wj \cdot \left(wj \cdot wj\right)\right)\right) + \color{blue}{\frac{x}{e^{wj} \cdot e^{wj} - \left(wj \cdot e^{wj}\right) \cdot \left(wj \cdot e^{wj}\right)} \cdot \left(e^{wj} - wj \cdot e^{wj}\right)}\]
  10. Final simplification1.2

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

Reproduce

herbie shell --seed 2019168 
(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))))))