wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\begin{array}{l}
\mathbf{if}\;wj \le 7.575706194898737323694237493331283921083 \cdot 10^{-11}:\\
\;\;\;\;\left(x + {wj}^{2}\right) - 2 \cdot \left(wj \cdot x\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{\frac{1}{\sqrt[3]{wj + 1} \cdot \sqrt[3]{wj + 1}}}{\sqrt{e^{wj}}} \cdot \frac{\frac{x}{\sqrt[3]{wj + 1}}}{\sqrt{e^{wj}}} + wj\right) - \frac{wj}{wj + 1}\\
\end{array}double f(double wj, double x) {
double r157027 = wj;
double r157028 = exp(r157027);
double r157029 = r157027 * r157028;
double r157030 = x;
double r157031 = r157029 - r157030;
double r157032 = r157028 + r157029;
double r157033 = r157031 / r157032;
double r157034 = r157027 - r157033;
return r157034;
}
double f(double wj, double x) {
double r157035 = wj;
double r157036 = 7.575706194898737e-11;
bool r157037 = r157035 <= r157036;
double r157038 = x;
double r157039 = 2.0;
double r157040 = pow(r157035, r157039);
double r157041 = r157038 + r157040;
double r157042 = r157035 * r157038;
double r157043 = r157039 * r157042;
double r157044 = r157041 - r157043;
double r157045 = 1.0;
double r157046 = r157035 + r157045;
double r157047 = cbrt(r157046);
double r157048 = r157047 * r157047;
double r157049 = r157045 / r157048;
double r157050 = exp(r157035);
double r157051 = sqrt(r157050);
double r157052 = r157049 / r157051;
double r157053 = r157038 / r157047;
double r157054 = r157053 / r157051;
double r157055 = r157052 * r157054;
double r157056 = r157055 + r157035;
double r157057 = r157035 / r157046;
double r157058 = r157056 - r157057;
double r157059 = r157037 ? r157044 : r157058;
return r157059;
}




Bits error versus wj




Bits error versus x
Results
| Original | 13.7 |
|---|---|
| Target | 13.1 |
| Herbie | 1.0 |
if wj < 7.575706194898737e-11Initial program 13.4
Simplified13.4
Taylor expanded around 0 0.9
if 7.575706194898737e-11 < wj Initial program 25.5
Simplified4.0
rmApplied add-sqr-sqrt4.1
Applied add-cube-cbrt4.3
Applied *-un-lft-identity4.3
Applied times-frac4.3
Applied times-frac4.3
Final simplification1.0
herbie shell --seed 2019353
(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))))))