\frac{\left(x \cdot 2\right) \cdot y}{x - y}\begin{array}{l}
\mathbf{if}\;y \le -2.5251409834127483 \cdot 10^{52} \lor \neg \left(y \le 1.226684745187438 \cdot 10^{-25}\right):\\
\;\;\;\;\frac{x \cdot 2}{\frac{x - y}{y}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{x - y} \cdot \left(y \cdot 2\right)\\
\end{array}double f(double x, double y) {
double r585914 = x;
double r585915 = 2.0;
double r585916 = r585914 * r585915;
double r585917 = y;
double r585918 = r585916 * r585917;
double r585919 = r585914 - r585917;
double r585920 = r585918 / r585919;
return r585920;
}
double f(double x, double y) {
double r585921 = y;
double r585922 = -2.5251409834127483e+52;
bool r585923 = r585921 <= r585922;
double r585924 = 1.226684745187438e-25;
bool r585925 = r585921 <= r585924;
double r585926 = !r585925;
bool r585927 = r585923 || r585926;
double r585928 = x;
double r585929 = 2.0;
double r585930 = r585928 * r585929;
double r585931 = r585928 - r585921;
double r585932 = r585931 / r585921;
double r585933 = r585930 / r585932;
double r585934 = r585928 / r585931;
double r585935 = r585921 * r585929;
double r585936 = r585934 * r585935;
double r585937 = r585927 ? r585933 : r585936;
return r585937;
}




Bits error versus x




Bits error versus y
Results
| Original | 15.5 |
|---|---|
| Target | 0.4 |
| Herbie | 0.2 |
if y < -2.5251409834127483e+52 or 1.226684745187438e-25 < y Initial program 17.4
rmApplied associate-/l*0.1
if -2.5251409834127483e+52 < y < 1.226684745187438e-25Initial program 13.7
rmApplied associate-/l*14.3
rmApplied div-inv14.4
Applied times-frac0.4
Simplified0.2
Final simplification0.2
herbie shell --seed 2020036
(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)))