wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\left(wj \cdot wj + \left(wj \cdot wj - wj\right) \cdot \left(wj \cdot wj\right)\right) + \frac{x}{e^{wj} \cdot e^{wj} - \left(wj \cdot e^{wj}\right) \cdot \left(wj \cdot e^{wj}\right)} \cdot \left(e^{wj} - wj \cdot e^{wj}\right)double f(double wj, double x) {
double r10045977 = wj;
double r10045978 = exp(r10045977);
double r10045979 = r10045977 * r10045978;
double r10045980 = x;
double r10045981 = r10045979 - r10045980;
double r10045982 = r10045978 + r10045979;
double r10045983 = r10045981 / r10045982;
double r10045984 = r10045977 - r10045983;
return r10045984;
}
double f(double wj, double x) {
double r10045985 = wj;
double r10045986 = r10045985 * r10045985;
double r10045987 = r10045986 - r10045985;
double r10045988 = r10045987 * r10045986;
double r10045989 = r10045986 + r10045988;
double r10045990 = x;
double r10045991 = exp(r10045985);
double r10045992 = r10045991 * r10045991;
double r10045993 = r10045985 * r10045991;
double r10045994 = r10045993 * r10045993;
double r10045995 = r10045992 - r10045994;
double r10045996 = r10045990 / r10045995;
double r10045997 = r10045991 - r10045993;
double r10045998 = r10045996 * r10045997;
double r10045999 = r10045989 + r10045998;
return r10045999;
}




Bits error versus wj




Bits error versus x
Results
| Original | 13.3 |
|---|---|
| Target | 12.7 |
| Herbie | 1.2 |
Initial program 13.3
rmApplied div-sub13.3
Applied associate--r-7.2
Taylor expanded around 0 1.1
Simplified1.1
rmApplied flip-+1.2
Applied associate-/r/1.2
Final simplification1.2
herbie shell --seed 2019169
(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))))))