\frac{\left(x \cdot 2\right) \cdot y}{x - y}\begin{array}{l}
\mathbf{if}\;x \le -8.9668118683841495 \cdot 10^{107} \lor \neg \left(x \le 1.3220637101071684 \cdot 10^{-86}\right):\\
\;\;\;\;\frac{x \cdot 2}{x - y} \cdot y\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot 2}{\frac{x}{y} - 1}\\
\end{array}double f(double x, double y) {
double r476737 = x;
double r476738 = 2.0;
double r476739 = r476737 * r476738;
double r476740 = y;
double r476741 = r476739 * r476740;
double r476742 = r476737 - r476740;
double r476743 = r476741 / r476742;
return r476743;
}
double f(double x, double y) {
double r476744 = x;
double r476745 = -8.96681186838415e+107;
bool r476746 = r476744 <= r476745;
double r476747 = 1.3220637101071684e-86;
bool r476748 = r476744 <= r476747;
double r476749 = !r476748;
bool r476750 = r476746 || r476749;
double r476751 = 2.0;
double r476752 = r476744 * r476751;
double r476753 = y;
double r476754 = r476744 - r476753;
double r476755 = r476752 / r476754;
double r476756 = r476755 * r476753;
double r476757 = r476744 / r476753;
double r476758 = 1.0;
double r476759 = r476757 - r476758;
double r476760 = r476752 / r476759;
double r476761 = r476750 ? r476756 : r476760;
return r476761;
}




Bits error versus x




Bits error versus y
Results
| Original | 15.4 |
|---|---|
| Target | 0.4 |
| Herbie | 0.8 |
if x < -8.96681186838415e+107 or 1.3220637101071684e-86 < x Initial program 16.1
rmApplied associate-/l*15.3
rmApplied associate-/r/0.9
if -8.96681186838415e+107 < x < 1.3220637101071684e-86Initial program 14.7
rmApplied associate-/l*0.7
rmApplied div-sub0.7
Simplified0.7
Final simplification0.8
herbie shell --seed 2020039 +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)))