\frac{\left(x \cdot 2\right) \cdot y}{x - y}\begin{array}{l}
\mathbf{if}\;y \le -3.92710084194865545 \cdot 10^{143} \lor \neg \left(y \le 0.075799955277164155\right):\\
\;\;\;\;\frac{x \cdot 2}{\frac{x - y}{y}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{x - y} \cdot \left(y \cdot 2\right)\\
\end{array}double f(double x, double y) {
double r519278 = x;
double r519279 = 2.0;
double r519280 = r519278 * r519279;
double r519281 = y;
double r519282 = r519280 * r519281;
double r519283 = r519278 - r519281;
double r519284 = r519282 / r519283;
return r519284;
}
double f(double x, double y) {
double r519285 = y;
double r519286 = -3.9271008419486554e+143;
bool r519287 = r519285 <= r519286;
double r519288 = 0.07579995527716415;
bool r519289 = r519285 <= r519288;
double r519290 = !r519289;
bool r519291 = r519287 || r519290;
double r519292 = x;
double r519293 = 2.0;
double r519294 = r519292 * r519293;
double r519295 = r519292 - r519285;
double r519296 = r519295 / r519285;
double r519297 = r519294 / r519296;
double r519298 = r519292 / r519295;
double r519299 = r519285 * r519293;
double r519300 = r519298 * r519299;
double r519301 = r519291 ? r519297 : r519300;
return r519301;
}




Bits error versus x




Bits error versus y
Results
| Original | 14.9 |
|---|---|
| Target | 0.3 |
| Herbie | 0.7 |
if y < -3.9271008419486554e+143 or 0.07579995527716415 < y Initial program 18.7
rmApplied associate-/l*0.1
if -3.9271008419486554e+143 < y < 0.07579995527716415Initial program 12.5
rmApplied associate-/l*12.1
rmApplied div-inv12.2
Applied times-frac1.3
Simplified1.1
Final simplification0.7
herbie shell --seed 2020089 +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)))