\frac{\left(x \cdot 2\right) \cdot y}{x - y}\begin{array}{l}
\mathbf{if}\;y \leq -270744910897807.88 \lor \neg \left(y \leq 7.327974932373526 \cdot 10^{-57}\right):\\
\;\;\;\;\frac{x \cdot 2}{\frac{x - y}{y}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{x - y} \cdot \left(y \cdot 2\right)\\
\end{array}(FPCore (x y) :precision binary64 (/ (* (* x 2.0) y) (- x y)))
(FPCore (x y) :precision binary64 (if (or (<= y -270744910897807.88) (not (<= y 7.327974932373526e-57))) (/ (* x 2.0) (/ (- x y) y)) (* (/ x (- x y)) (* y 2.0))))
double code(double x, double y) {
return (((double) (((double) (x * 2.0)) * y)) / ((double) (x - y)));
}
double code(double x, double y) {
double tmp;
if (((y <= -270744910897807.88) || !(y <= 7.327974932373526e-57))) {
tmp = (((double) (x * 2.0)) / (((double) (x - y)) / y));
} else {
tmp = ((double) ((x / ((double) (x - y))) * ((double) (y * 2.0))));
}
return tmp;
}




Bits error versus x




Bits error versus y
Results
| Original | 15.1 |
|---|---|
| Target | 0.3 |
| Herbie | 0.2 |
if y < -270744910897807.88 or 7.3279749323735261e-57 < y Initial program 15.1
rmApplied associate-/l*_binary640.4
if -270744910897807.88 < y < 7.3279749323735261e-57Initial program 15.1
rmApplied associate-/l*_binary6416.4
rmApplied div-inv_binary6416.5
Applied times-frac_binary640.2
Simplified0.0
Final simplification0.2
herbie shell --seed 2020205
(FPCore (x y)
:name "Linear.Projection:perspective from linear-1.19.1.3, B"
:precision binary64
:herbie-target
(if (< x -1.7210442634149447e+81) (* (/ (* 2.0 x) (- x y)) y) (if (< x 8.364504563556443e+16) (/ (* x 2.0) (/ (- x y) y)) (* (/ (* 2.0 x) (- x y)) y)))
(/ (* (* x 2.0) y) (- x y)))