Average Error: 14.1 → 1.0
Time: 21.0s
Precision: 64
\[wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\]
\[\left(\mathsf{fma}\left(wj, wj, {wj}^{4}\right) - {wj}^{3}\right) + x \cdot \frac{e^{-wj}}{1 + wj}\]
wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}
\left(\mathsf{fma}\left(wj, wj, {wj}^{4}\right) - {wj}^{3}\right) + x \cdot \frac{e^{-wj}}{1 + wj}
double f(double wj, double x) {
        double r230143 = wj;
        double r230144 = exp(r230143);
        double r230145 = r230143 * r230144;
        double r230146 = x;
        double r230147 = r230145 - r230146;
        double r230148 = r230144 + r230145;
        double r230149 = r230147 / r230148;
        double r230150 = r230143 - r230149;
        return r230150;
}

double f(double wj, double x) {
        double r230151 = wj;
        double r230152 = 4.0;
        double r230153 = pow(r230151, r230152);
        double r230154 = fma(r230151, r230151, r230153);
        double r230155 = 3.0;
        double r230156 = pow(r230151, r230155);
        double r230157 = r230154 - r230156;
        double r230158 = x;
        double r230159 = -r230151;
        double r230160 = exp(r230159);
        double r230161 = 1.0;
        double r230162 = r230161 + r230151;
        double r230163 = r230160 / r230162;
        double r230164 = r230158 * r230163;
        double r230165 = r230157 + r230164;
        return r230165;
}

Error

Bits error versus wj

Bits error versus x

Target

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

Derivation

  1. Initial program 14.1

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

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

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

    \[\leadsto \color{blue}{\left(wj - \frac{\frac{wj}{1}}{1 + wj}\right) + \frac{\frac{x}{e^{wj}}}{1 + wj}}\]
  6. Simplified7.1

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

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

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

    \[\leadsto \left(\mathsf{fma}\left(wj, wj, {wj}^{4}\right) - {wj}^{3}\right) + \frac{\frac{x}{e^{wj}}}{\color{blue}{1 \cdot \left(1 + wj\right)}}\]
  11. Applied div-inv1.0

    \[\leadsto \left(\mathsf{fma}\left(wj, wj, {wj}^{4}\right) - {wj}^{3}\right) + \frac{\color{blue}{x \cdot \frac{1}{e^{wj}}}}{1 \cdot \left(1 + wj\right)}\]
  12. Applied times-frac1.0

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

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

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

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

Reproduce

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