wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\begin{array}{l}
\mathbf{if}\;wj \le 1.13141850474180142 \cdot 10^{-4}:\\
\;\;\;\;\frac{\frac{x}{wj + 1}}{e^{wj}} + \left(\left({wj}^{4} + {wj}^{2}\right) - {wj}^{3}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\frac{x}{wj + 1}} \cdot \sqrt[3]{\frac{x}{wj + 1}}}{\sqrt{e^{wj}}} \cdot \frac{\sqrt[3]{\frac{x}{wj + 1}}}{\sqrt{e^{wj}}} + \left(wj - \frac{wj}{wj + 1}\right)\\
\end{array}double f(double wj, double x) {
double r301069 = wj;
double r301070 = exp(r301069);
double r301071 = r301069 * r301070;
double r301072 = x;
double r301073 = r301071 - r301072;
double r301074 = r301070 + r301071;
double r301075 = r301073 / r301074;
double r301076 = r301069 - r301075;
return r301076;
}
double f(double wj, double x) {
double r301077 = wj;
double r301078 = 0.00011314185047418014;
bool r301079 = r301077 <= r301078;
double r301080 = x;
double r301081 = 1.0;
double r301082 = r301077 + r301081;
double r301083 = r301080 / r301082;
double r301084 = exp(r301077);
double r301085 = r301083 / r301084;
double r301086 = 4.0;
double r301087 = pow(r301077, r301086);
double r301088 = 2.0;
double r301089 = pow(r301077, r301088);
double r301090 = r301087 + r301089;
double r301091 = 3.0;
double r301092 = pow(r301077, r301091);
double r301093 = r301090 - r301092;
double r301094 = r301085 + r301093;
double r301095 = cbrt(r301083);
double r301096 = r301095 * r301095;
double r301097 = sqrt(r301084);
double r301098 = r301096 / r301097;
double r301099 = r301095 / r301097;
double r301100 = r301098 * r301099;
double r301101 = r301077 / r301082;
double r301102 = r301077 - r301101;
double r301103 = r301100 + r301102;
double r301104 = r301079 ? r301094 : r301103;
return r301104;
}




Bits error versus wj




Bits error versus x
Results
| Original | 13.8 |
|---|---|
| Target | 13.2 |
| Herbie | 0.3 |
if wj < 0.00011314185047418014Initial program 13.4
Simplified13.4
rmApplied associate--l+6.9
Taylor expanded around 0 0.3
if 0.00011314185047418014 < wj Initial program 29.7
Simplified0.8
rmApplied associate--l+0.7
rmApplied add-sqr-sqrt0.8
Applied add-cube-cbrt1.0
Applied times-frac1.0
Final simplification0.3
herbie shell --seed 2020062
(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))))))