wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\left(\left(wj \cdot wj\right) \cdot \left(wj \cdot wj\right) + \left(wj \cdot wj - wj \cdot \left(wj \cdot wj\right)\right)\right) + \left(e^{wj} - e^{wj} \cdot wj\right) \cdot \frac{x}{e^{wj} \cdot e^{wj} - \left(e^{wj} \cdot wj\right) \cdot \left(e^{wj} \cdot wj\right)}double f(double wj, double x) {
double r9227187 = wj;
double r9227188 = exp(r9227187);
double r9227189 = r9227187 * r9227188;
double r9227190 = x;
double r9227191 = r9227189 - r9227190;
double r9227192 = r9227188 + r9227189;
double r9227193 = r9227191 / r9227192;
double r9227194 = r9227187 - r9227193;
return r9227194;
}
double f(double wj, double x) {
double r9227195 = wj;
double r9227196 = r9227195 * r9227195;
double r9227197 = r9227196 * r9227196;
double r9227198 = r9227195 * r9227196;
double r9227199 = r9227196 - r9227198;
double r9227200 = r9227197 + r9227199;
double r9227201 = exp(r9227195);
double r9227202 = r9227201 * r9227195;
double r9227203 = r9227201 - r9227202;
double r9227204 = x;
double r9227205 = r9227201 * r9227201;
double r9227206 = r9227202 * r9227202;
double r9227207 = r9227205 - r9227206;
double r9227208 = r9227204 / r9227207;
double r9227209 = r9227203 * r9227208;
double r9227210 = r9227200 + r9227209;
return r9227210;
}




Bits error versus wj




Bits error versus x
Results
| Original | 13.1 |
|---|---|
| Target | 12.4 |
| Herbie | 1.2 |
Initial program 13.1
rmApplied div-sub13.1
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 2019168
(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))))))