wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\frac{\frac{x}{e^{wj}}}{wj + 1} + \mathsf{fma}\left(wj \cdot wj, wj \cdot wj, wj \cdot wj - wj \cdot \left(wj \cdot wj\right)\right)double f(double wj, double x) {
double r7939441 = wj;
double r7939442 = exp(r7939441);
double r7939443 = r7939441 * r7939442;
double r7939444 = x;
double r7939445 = r7939443 - r7939444;
double r7939446 = r7939442 + r7939443;
double r7939447 = r7939445 / r7939446;
double r7939448 = r7939441 - r7939447;
return r7939448;
}
double f(double wj, double x) {
double r7939449 = x;
double r7939450 = wj;
double r7939451 = exp(r7939450);
double r7939452 = r7939449 / r7939451;
double r7939453 = 1.0;
double r7939454 = r7939450 + r7939453;
double r7939455 = r7939452 / r7939454;
double r7939456 = r7939450 * r7939450;
double r7939457 = r7939450 * r7939456;
double r7939458 = r7939456 - r7939457;
double r7939459 = fma(r7939456, r7939456, r7939458);
double r7939460 = r7939455 + r7939459;
return r7939460;
}




Bits error versus wj




Bits error versus x
| Original | 13.8 |
|---|---|
| Target | 13.2 |
| Herbie | 1.1 |
Initial program 13.8
rmApplied div-sub13.8
Applied associate--r-7.8
Taylor expanded around 0 1.1
Simplified1.1
rmApplied *-un-lft-identity1.1
Applied distribute-rgt-out1.1
Applied associate-/r*1.1
Final simplification1.1
herbie shell --seed 2019164 +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))))))