\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}{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 r582620 = x;
double r582621 = 2.0;
double r582622 = r582620 * r582621;
double r582623 = y;
double r582624 = r582622 * r582623;
double r582625 = r582620 - r582623;
double r582626 = r582624 / r582625;
return r582626;
}
double f(double x, double y) {
double r582627 = x;
double r582628 = -5.127799103239741e+59;
bool r582629 = r582627 <= r582628;
double r582630 = 4.149781996017055e-53;
bool r582631 = r582627 <= r582630;
double r582632 = !r582631;
bool r582633 = r582629 || r582632;
double r582634 = y;
double r582635 = r582627 - r582634;
double r582636 = r582627 / r582635;
double r582637 = 2.0;
double r582638 = r582634 * r582637;
double r582639 = r582636 * r582638;
double r582640 = r582627 * r582637;
double r582641 = r582635 / r582634;
double r582642 = r582640 / r582641;
double r582643 = r582633 ? r582639 : r582642;
return r582643;
}




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 div-inv15.2
Applied times-frac0.5
Simplified0.3
if -5.127799103239741e+59 < x < 4.149781996017055e-53Initial program 13.6
rmApplied associate-/l*0.2
Final simplification0.3
herbie shell --seed 2020027
(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)))