\frac{\left(x \cdot 2\right) \cdot y}{x - y}\begin{array}{l}
\mathbf{if}\;y \le -11894198345334408230327762615508217626620:\\
\;\;\;\;\left(x \cdot 2\right) \cdot \frac{y}{x - y}\\
\mathbf{elif}\;y \le 3.827108002628365811088571233801504531292 \cdot 10^{68}:\\
\;\;\;\;\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 r546384 = x;
double r546385 = 2.0;
double r546386 = r546384 * r546385;
double r546387 = y;
double r546388 = r546386 * r546387;
double r546389 = r546384 - r546387;
double r546390 = r546388 / r546389;
return r546390;
}
double f(double x, double y) {
double r546391 = y;
double r546392 = -1.1894198345334408e+40;
bool r546393 = r546391 <= r546392;
double r546394 = x;
double r546395 = 2.0;
double r546396 = r546394 * r546395;
double r546397 = r546394 - r546391;
double r546398 = r546391 / r546397;
double r546399 = r546396 * r546398;
double r546400 = 3.827108002628366e+68;
bool r546401 = r546391 <= r546400;
double r546402 = r546394 / r546397;
double r546403 = r546391 * r546395;
double r546404 = r546402 * r546403;
double r546405 = r546397 / r546391;
double r546406 = r546396 / r546405;
double r546407 = r546401 ? r546404 : r546406;
double r546408 = r546393 ? r546399 : r546407;
return r546408;
}




Bits error versus x




Bits error versus y
Results
| Original | 14.9 |
|---|---|
| Target | 0.4 |
| Herbie | 0.2 |
if y < -1.1894198345334408e+40Initial program 18.3
rmApplied *-un-lft-identity18.3
Applied times-frac0.2
Simplified0.2
if -1.1894198345334408e+40 < y < 3.827108002628366e+68Initial program 11.9
rmApplied associate-/l*12.7
rmApplied div-inv12.8
Applied times-frac0.5
Simplified0.3
if 3.827108002628366e+68 < y Initial program 20.2
rmApplied associate-/l*0.1
Final simplification0.2
herbie shell --seed 2020001 +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)))