wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\left(wj \cdot wj + x\right) - 2 \cdot \left(wj \cdot x\right)
double f(double wj, double x) {
double r3016388 = wj;
double r3016389 = exp(r3016388);
double r3016390 = r3016388 * r3016389;
double r3016391 = x;
double r3016392 = r3016390 - r3016391;
double r3016393 = r3016389 + r3016390;
double r3016394 = r3016392 / r3016393;
double r3016395 = r3016388 - r3016394;
return r3016395;
}
double f(double wj, double x) {
double r3016396 = wj;
double r3016397 = r3016396 * r3016396;
double r3016398 = x;
double r3016399 = r3016397 + r3016398;
double r3016400 = 2.0;
double r3016401 = r3016396 * r3016398;
double r3016402 = r3016400 * r3016401;
double r3016403 = r3016399 - r3016402;
return r3016403;
}




Bits error versus wj




Bits error versus x
Results
| Original | 14.0 |
|---|---|
| Target | 13.4 |
| Herbie | 2.0 |
Initial program 14.0
Taylor expanded around 0 2.0
Simplified2.0
Final simplification2.0
herbie shell --seed 2019128 +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))))))