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) + \left(\left(\frac{5}{2} \cdot \left(wj \cdot wj\right) - \left(wj + wj\right)\right) \cdot x + x\right)double f(double wj, double x) {
double r6794871 = wj;
double r6794872 = exp(r6794871);
double r6794873 = r6794871 * r6794872;
double r6794874 = x;
double r6794875 = r6794873 - r6794874;
double r6794876 = r6794872 + r6794873;
double r6794877 = r6794875 / r6794876;
double r6794878 = r6794871 - r6794877;
return r6794878;
}
double f(double wj, double x) {
double r6794879 = wj;
double r6794880 = r6794879 * r6794879;
double r6794881 = r6794880 - r6794879;
double r6794882 = r6794881 * r6794880;
double r6794883 = r6794880 + r6794882;
double r6794884 = 2.5;
double r6794885 = r6794884 * r6794880;
double r6794886 = r6794879 + r6794879;
double r6794887 = r6794885 - r6794886;
double r6794888 = x;
double r6794889 = r6794887 * r6794888;
double r6794890 = r6794889 + r6794888;
double r6794891 = r6794883 + r6794890;
return r6794891;
}




Bits error versus wj




Bits error versus x
Results
| Original | 14.1 |
|---|---|
| Target | 13.5 |
| Herbie | 1.5 |
Initial program 14.1
rmApplied div-sub14.1
Applied associate--r-7.6
Taylor expanded around 0 1.0
Simplified1.0
Taylor expanded around 0 1.5
Simplified1.5
Final simplification1.5
herbie shell --seed 2019142
(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))))))