\frac{\left(x \cdot 2\right) \cdot y}{x - y}\begin{array}{l}
\mathbf{if}\;x \le -1.390909119607474 \cdot 10^{-45} \lor \neg \left(x \le 7.09985068380016666 \cdot 10^{-27}\right):\\
\;\;\;\;\frac{x}{x - y} \cdot \left(y \cdot 2\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot 2\right) \cdot \left(y \cdot \frac{1}{x - y}\right)\\
\end{array}double f(double x, double y) {
double r489824 = x;
double r489825 = 2.0;
double r489826 = r489824 * r489825;
double r489827 = y;
double r489828 = r489826 * r489827;
double r489829 = r489824 - r489827;
double r489830 = r489828 / r489829;
return r489830;
}
double f(double x, double y) {
double r489831 = x;
double r489832 = -1.390909119607474e-45;
bool r489833 = r489831 <= r489832;
double r489834 = 7.099850683800167e-27;
bool r489835 = r489831 <= r489834;
double r489836 = !r489835;
bool r489837 = r489833 || r489836;
double r489838 = y;
double r489839 = r489831 - r489838;
double r489840 = r489831 / r489839;
double r489841 = 2.0;
double r489842 = r489838 * r489841;
double r489843 = r489840 * r489842;
double r489844 = r489831 * r489841;
double r489845 = 1.0;
double r489846 = r489845 / r489839;
double r489847 = r489838 * r489846;
double r489848 = r489844 * r489847;
double r489849 = r489837 ? r489843 : r489848;
return r489849;
}




Bits error versus x




Bits error versus y
Results
| Original | 14.8 |
|---|---|
| Target | 0.4 |
| Herbie | 0.2 |
if x < -1.390909119607474e-45 or 7.099850683800167e-27 < x Initial program 14.4
rmApplied associate-/l*13.0
rmApplied div-inv13.2
Applied times-frac0.4
Simplified0.3
if -1.390909119607474e-45 < x < 7.099850683800167e-27Initial program 15.4
rmApplied *-un-lft-identity15.4
Applied times-frac0.0
Simplified0.0
rmApplied div-inv0.2
Final simplification0.2
herbie shell --seed 2020057 +o rules:numerics
(FPCore (x y)
:name "Linear.Projection:perspective from linear-1.19.1.3, B"
:precision binary64
:herbie-target
(if (< x -1.7210442634149447e+81) (* (/ (* 2 x) (- x y)) y) (if (< x 83645045635564432) (/ (* x 2) (/ (- x y) y)) (* (/ (* 2 x) (- x y)) y)))
(/ (* (* x 2) y) (- x y)))