\frac{\left(x \cdot 2\right) \cdot y}{x - y}\begin{array}{l}
\mathbf{if}\;x \le -95380968.4142476171 \lor \neg \left(x \le 1.64772115240192995 \cdot 10^{69}\right):\\
\;\;\;\;\frac{x}{x - y} \cdot \left(y \cdot 2\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot 2}{\frac{x - y}{y}}\\
\end{array}double f(double x, double y) {
double r499229 = x;
double r499230 = 2.0;
double r499231 = r499229 * r499230;
double r499232 = y;
double r499233 = r499231 * r499232;
double r499234 = r499229 - r499232;
double r499235 = r499233 / r499234;
return r499235;
}
double f(double x, double y) {
double r499236 = x;
double r499237 = -95380968.41424762;
bool r499238 = r499236 <= r499237;
double r499239 = 1.64772115240193e+69;
bool r499240 = r499236 <= r499239;
double r499241 = !r499240;
bool r499242 = r499238 || r499241;
double r499243 = y;
double r499244 = r499236 - r499243;
double r499245 = r499236 / r499244;
double r499246 = 2.0;
double r499247 = r499243 * r499246;
double r499248 = r499245 * r499247;
double r499249 = r499236 * r499246;
double r499250 = r499244 / r499243;
double r499251 = r499249 / r499250;
double r499252 = r499242 ? r499248 : r499251;
return r499252;
}




Bits error versus x




Bits error versus y
Results
| Original | 15.4 |
|---|---|
| Target | 0.3 |
| Herbie | 0.2 |
if x < -95380968.41424762 or 1.64772115240193e+69 < x Initial program 18.4
rmApplied associate-/l*16.2
rmApplied div-inv16.4
Applied times-frac0.2
Simplified0.1
if -95380968.41424762 < x < 1.64772115240193e+69Initial program 13.0
rmApplied associate-/l*0.3
Final simplification0.2
herbie shell --seed 2020056 +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)))