wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\left(wj \cdot wj + \left(\left(wj \cdot wj\right) \cdot \left(wj \cdot wj\right) - wj \cdot \left(wj \cdot wj\right)\right)\right) + \frac{x}{\frac{e^{wj + \left(wj + wj\right)} \cdot \left(wj \cdot \left(wj \cdot wj\right) + 1\right)}{\left(\left(e^{wj} \cdot wj\right) \cdot \left(e^{wj} \cdot wj\right) - e^{wj} \cdot \left(e^{wj} \cdot wj\right)\right) + e^{wj} \cdot e^{wj}}}double f(double wj, double x) {
double r5705618 = wj;
double r5705619 = exp(r5705618);
double r5705620 = r5705618 * r5705619;
double r5705621 = x;
double r5705622 = r5705620 - r5705621;
double r5705623 = r5705619 + r5705620;
double r5705624 = r5705622 / r5705623;
double r5705625 = r5705618 - r5705624;
return r5705625;
}
double f(double wj, double x) {
double r5705626 = wj;
double r5705627 = r5705626 * r5705626;
double r5705628 = r5705627 * r5705627;
double r5705629 = r5705626 * r5705627;
double r5705630 = r5705628 - r5705629;
double r5705631 = r5705627 + r5705630;
double r5705632 = x;
double r5705633 = r5705626 + r5705626;
double r5705634 = r5705626 + r5705633;
double r5705635 = exp(r5705634);
double r5705636 = 1.0;
double r5705637 = r5705629 + r5705636;
double r5705638 = r5705635 * r5705637;
double r5705639 = exp(r5705626);
double r5705640 = r5705639 * r5705626;
double r5705641 = r5705640 * r5705640;
double r5705642 = r5705639 * r5705640;
double r5705643 = r5705641 - r5705642;
double r5705644 = r5705639 * r5705639;
double r5705645 = r5705643 + r5705644;
double r5705646 = r5705638 / r5705645;
double r5705647 = r5705632 / r5705646;
double r5705648 = r5705631 + r5705647;
return r5705648;
}




Bits error versus wj




Bits error versus x
Results
| Original | 13.5 |
|---|---|
| Target | 12.9 |
| Herbie | 1.2 |
Initial program 13.5
rmApplied div-sub13.5
Applied associate--r-7.5
Taylor expanded around 0 1.1
Simplified1.1
rmApplied flip3-+1.2
Simplified1.2
Final simplification1.2
herbie shell --seed 2019155
(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))))))