\frac{\left(x \cdot 2\right) \cdot y}{x - y}\begin{array}{l}
\mathbf{if}\;x \le -5.12779910323974141 \cdot 10^{59} \lor \neg \left(x \le 4.14978199601705522 \cdot 10^{-53}\right):\\
\;\;\;\;\frac{x \cdot 2}{x - y} \cdot y\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot 2}{\frac{x - y}{y}}\\
\end{array}double f(double x, double y) {
double r429540 = x;
double r429541 = 2.0;
double r429542 = r429540 * r429541;
double r429543 = y;
double r429544 = r429542 * r429543;
double r429545 = r429540 - r429543;
double r429546 = r429544 / r429545;
return r429546;
}
double f(double x, double y) {
double r429547 = x;
double r429548 = -5.127799103239741e+59;
bool r429549 = r429547 <= r429548;
double r429550 = 4.149781996017055e-53;
bool r429551 = r429547 <= r429550;
double r429552 = !r429551;
bool r429553 = r429549 || r429552;
double r429554 = 2.0;
double r429555 = r429547 * r429554;
double r429556 = y;
double r429557 = r429547 - r429556;
double r429558 = r429555 / r429557;
double r429559 = r429558 * r429556;
double r429560 = r429557 / r429556;
double r429561 = r429555 / r429560;
double r429562 = r429553 ? r429559 : r429561;
return r429562;
}




Bits error versus x




Bits error versus y
Results
| Original | 14.9 |
|---|---|
| Target | 0.3 |
| Herbie | 0.3 |
if x < -5.127799103239741e+59 or 4.149781996017055e-53 < x Initial program 16.2
rmApplied associate-/l*15.1
rmApplied associate-/r/0.3
if -5.127799103239741e+59 < x < 4.149781996017055e-53Initial program 13.6
rmApplied associate-/l*0.2
Final simplification0.3
herbie shell --seed 2020027 +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)))