wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\begin{array}{l}
\mathbf{if}\;wj \le 7.273522667070596 \cdot 10^{-05}:\\
\;\;\;\;\sqrt{(\left(wj \cdot wj\right) \cdot \left(wj \cdot wj - wj\right) + \left(wj \cdot wj\right))_*} \cdot \sqrt{(\left(wj \cdot wj\right) \cdot \left(wj \cdot wj - wj\right) + \left(wj \cdot wj\right))_*} + \frac{x}{e^{wj} \cdot wj + e^{wj}}\\
\mathbf{else}:\\
\;\;\;\;wj - \frac{wj - \frac{x}{e^{wj}}}{1 + wj}\\
\end{array}double f(double wj, double x) {
double r36325569 = wj;
double r36325570 = exp(r36325569);
double r36325571 = r36325569 * r36325570;
double r36325572 = x;
double r36325573 = r36325571 - r36325572;
double r36325574 = r36325570 + r36325571;
double r36325575 = r36325573 / r36325574;
double r36325576 = r36325569 - r36325575;
return r36325576;
}
double f(double wj, double x) {
double r36325577 = wj;
double r36325578 = 7.273522667070596e-05;
bool r36325579 = r36325577 <= r36325578;
double r36325580 = r36325577 * r36325577;
double r36325581 = r36325580 - r36325577;
double r36325582 = fma(r36325580, r36325581, r36325580);
double r36325583 = sqrt(r36325582);
double r36325584 = r36325583 * r36325583;
double r36325585 = x;
double r36325586 = exp(r36325577);
double r36325587 = r36325586 * r36325577;
double r36325588 = r36325587 + r36325586;
double r36325589 = r36325585 / r36325588;
double r36325590 = r36325584 + r36325589;
double r36325591 = r36325585 / r36325586;
double r36325592 = r36325577 - r36325591;
double r36325593 = 1.0;
double r36325594 = r36325593 + r36325577;
double r36325595 = r36325592 / r36325594;
double r36325596 = r36325577 - r36325595;
double r36325597 = r36325579 ? r36325590 : r36325596;
return r36325597;
}




Bits error versus wj




Bits error versus x
| Original | 13.6 |
|---|---|
| Target | 13.1 |
| Herbie | 0.3 |
if wj < 7.273522667070596e-05Initial program 13.4
rmApplied div-sub13.4
Applied associate--r-6.8
Taylor expanded around 0 0.3
Simplified0.3
rmApplied add-sqr-sqrt0.3
if 7.273522667070596e-05 < wj Initial program 23.5
rmApplied add-cube-cbrt24.2
Applied add-cube-cbrt24.4
Applied prod-diff24.4
Simplified23.5
Simplified1.2
Final simplification0.3
herbie shell --seed 2019107 +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))))))