wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\begin{array}{l}
\mathbf{if}\;wj \le \frac{2262931210409171}{302231454903657293676544}:\\
\;\;\;\;\left(x + {wj}^{2}\right) - 2 \cdot \left(wj \cdot x\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{x}{\sqrt{e^{wj}}} \cdot \frac{\frac{1}{wj + 1}}{\sqrt{e^{wj}}} + wj\right) - \frac{wj}{wj + 1}\\
\end{array}double f(double wj, double x) {
double r115741 = wj;
double r115742 = exp(r115741);
double r115743 = r115741 * r115742;
double r115744 = x;
double r115745 = r115743 - r115744;
double r115746 = r115742 + r115743;
double r115747 = r115745 / r115746;
double r115748 = r115741 - r115747;
return r115748;
}
double f(double wj, double x) {
double r115749 = wj;
double r115750 = 2262931210409171.0;
double r115751 = 3.022314549036573e+23;
double r115752 = r115750 / r115751;
bool r115753 = r115749 <= r115752;
double r115754 = x;
double r115755 = 2.0;
double r115756 = pow(r115749, r115755);
double r115757 = r115754 + r115756;
double r115758 = r115749 * r115754;
double r115759 = r115755 * r115758;
double r115760 = r115757 - r115759;
double r115761 = exp(r115749);
double r115762 = sqrt(r115761);
double r115763 = r115754 / r115762;
double r115764 = 1.0;
double r115765 = r115749 + r115764;
double r115766 = r115764 / r115765;
double r115767 = r115766 / r115762;
double r115768 = r115763 * r115767;
double r115769 = r115768 + r115749;
double r115770 = r115749 / r115765;
double r115771 = r115769 - r115770;
double r115772 = r115753 ? r115760 : r115771;
return r115772;
}




Bits error versus wj




Bits error versus x
Results
| Original | 14.1 |
|---|---|
| Target | 13.6 |
| Herbie | 1.0 |
if wj < 7.48741129916649e-09Initial program 13.9
Simplified13.9
Taylor expanded around 0 1.0
if 7.48741129916649e-09 < wj Initial program 23.0
Simplified3.1
rmApplied add-sqr-sqrt3.2
Applied div-inv3.2
Applied times-frac3.2
Final simplification1.0
herbie shell --seed 2019303
(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))))))