\frac{\left(x \cdot 2\right) \cdot y}{x - y}\begin{array}{l}
\mathbf{if}\;x \le -1.678200599830845516946512912055678313986 \cdot 10^{53} \lor \neg \left(x \le 3.181619446512529125094192620739909077175 \cdot 10^{-59}\right):\\
\;\;\;\;\left(y \cdot 2\right) \cdot \frac{x}{x - y}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot 2}{\frac{x}{y} - 1}\\
\end{array}double f(double x, double y) {
double r262043 = x;
double r262044 = 2.0;
double r262045 = r262043 * r262044;
double r262046 = y;
double r262047 = r262045 * r262046;
double r262048 = r262043 - r262046;
double r262049 = r262047 / r262048;
return r262049;
}
double f(double x, double y) {
double r262050 = x;
double r262051 = -1.6782005998308455e+53;
bool r262052 = r262050 <= r262051;
double r262053 = 3.181619446512529e-59;
bool r262054 = r262050 <= r262053;
double r262055 = !r262054;
bool r262056 = r262052 || r262055;
double r262057 = y;
double r262058 = 2.0;
double r262059 = r262057 * r262058;
double r262060 = r262050 - r262057;
double r262061 = r262050 / r262060;
double r262062 = r262059 * r262061;
double r262063 = r262050 * r262058;
double r262064 = r262050 / r262057;
double r262065 = 1.0;
double r262066 = r262064 - r262065;
double r262067 = r262063 / r262066;
double r262068 = r262056 ? r262062 : r262067;
return r262068;
}




Bits error versus x




Bits error versus y
Results
| Original | 15.3 |
|---|---|
| Target | 0.4 |
| Herbie | 0.3 |
if x < -1.6782005998308455e+53 or 3.181619446512529e-59 < x Initial program 16.0
Simplified15.0
rmApplied div-inv15.1
Applied times-frac0.4
Simplified0.2
if -1.6782005998308455e+53 < x < 3.181619446512529e-59Initial program 14.5
Simplified0.3
rmApplied *-un-lft-identity0.3
Applied *-un-lft-identity0.3
Applied times-frac0.3
Simplified0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019196
(FPCore (x y)
:name "Linear.Projection:perspective from linear-1.19.1.3, B"
:herbie-target
(if (< x -1.7210442634149447e+81) (* (/ (* 2.0 x) (- x y)) y) (if (< x 8.364504563556443e+16) (/ (* x 2.0) (/ (- x y) y)) (* (/ (* 2.0 x) (- x y)) y)))
(/ (* (* x 2.0) y) (- x y)))