wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\left(wj \cdot x\right) \cdot -2 + \mathsf{fma}\left(wj, wj, x\right)double f(double wj, double x) {
double r2510465 = wj;
double r2510466 = exp(r2510465);
double r2510467 = r2510465 * r2510466;
double r2510468 = x;
double r2510469 = r2510467 - r2510468;
double r2510470 = r2510466 + r2510467;
double r2510471 = r2510469 / r2510470;
double r2510472 = r2510465 - r2510471;
return r2510472;
}
double f(double wj, double x) {
double r2510473 = wj;
double r2510474 = x;
double r2510475 = r2510473 * r2510474;
double r2510476 = -2.0;
double r2510477 = r2510475 * r2510476;
double r2510478 = fma(r2510473, r2510473, r2510474);
double r2510479 = r2510477 + r2510478;
return r2510479;
}




Bits error versus wj




Bits error versus x
| Original | 13.7 |
|---|---|
| Target | 13.1 |
| Herbie | 2.2 |
Initial program 13.7
Taylor expanded around 0 2.2
Simplified2.2
Final simplification2.2
herbie shell --seed 2019133 +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))))))