wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\begin{array}{l}
\mathbf{if}\;wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}} \le 7.163764145 \cdot 10^{-16}:\\
\;\;\;\;\left(\mathsf{fma}\left(wj, wj, {wj}^{4}\right) - {wj}^{3}\right) + \frac{\frac{x}{e^{wj}}}{1 + wj}\\
\mathbf{else}:\\
\;\;\;\;\left(wj - \frac{wj}{1 + wj}\right) + \frac{\frac{x}{e^{wj}}}{1 + wj}\\
\end{array}double f(double wj, double x) {
double r222129 = wj;
double r222130 = exp(r222129);
double r222131 = r222129 * r222130;
double r222132 = x;
double r222133 = r222131 - r222132;
double r222134 = r222130 + r222131;
double r222135 = r222133 / r222134;
double r222136 = r222129 - r222135;
return r222136;
}
double f(double wj, double x) {
double r222137 = wj;
double r222138 = exp(r222137);
double r222139 = r222137 * r222138;
double r222140 = x;
double r222141 = r222139 - r222140;
double r222142 = r222138 + r222139;
double r222143 = r222141 / r222142;
double r222144 = r222137 - r222143;
double r222145 = 7.163764144569851e-16;
bool r222146 = r222144 <= r222145;
double r222147 = 4.0;
double r222148 = pow(r222137, r222147);
double r222149 = fma(r222137, r222137, r222148);
double r222150 = 3.0;
double r222151 = pow(r222137, r222150);
double r222152 = r222149 - r222151;
double r222153 = r222140 / r222138;
double r222154 = 1.0;
double r222155 = r222154 + r222137;
double r222156 = r222153 / r222155;
double r222157 = r222152 + r222156;
double r222158 = r222137 / r222155;
double r222159 = r222137 - r222158;
double r222160 = r222159 + r222156;
double r222161 = r222146 ? r222157 : r222160;
return r222161;
}




Bits error versus wj




Bits error versus x
| Original | 13.9 |
|---|---|
| Target | 13.2 |
| Herbie | 0.3 |
if (- wj (/ (- (* wj (exp wj)) x) (+ (exp wj) (* wj (exp wj))))) < 7.163764144569851e-16Initial program 18.4
Simplified18.4
rmApplied div-sub18.4
Applied associate--r-9.7
Taylor expanded around 0 0.2
Simplified0.2
if 7.163764144569851e-16 < (- wj (/ (- (* wj (exp wj)) x) (+ (exp wj) (* wj (exp wj))))) Initial program 2.7
Simplified0.5
rmApplied div-sub0.5
Applied associate--r-0.5
Final simplification0.3
herbie shell --seed 2020043 +o rules:numerics
(FPCore (wj x)
:name "Jmat.Real.lambertw, newton loop step"
:precision binary64
:herbie-target
(- wj (- (/ wj (+ wj 1)) (/ x (+ (exp wj) (* wj (exp wj))))))
(- wj (/ (- (* wj (exp wj)) x) (+ (exp wj) (* wj (exp wj))))))