\frac{\left(x \cdot 2.0\right) \cdot y}{x - y}\begin{array}{l}
\mathbf{if}\;y \le -1.4392061780489917 \cdot 10^{-16}:\\
\;\;\;\;\frac{x \cdot 2.0}{\frac{x}{y} - 1}\\
\mathbf{elif}\;y \le 2.279321042838855 \cdot 10^{-104}:\\
\;\;\;\;\left(2.0 \cdot y\right) \cdot \frac{x}{x - y}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot 2.0}{\frac{x}{y} - 1}\\
\end{array}double f(double x, double y) {
double r20551821 = x;
double r20551822 = 2.0;
double r20551823 = r20551821 * r20551822;
double r20551824 = y;
double r20551825 = r20551823 * r20551824;
double r20551826 = r20551821 - r20551824;
double r20551827 = r20551825 / r20551826;
return r20551827;
}
double f(double x, double y) {
double r20551828 = y;
double r20551829 = -1.4392061780489917e-16;
bool r20551830 = r20551828 <= r20551829;
double r20551831 = x;
double r20551832 = 2.0;
double r20551833 = r20551831 * r20551832;
double r20551834 = r20551831 / r20551828;
double r20551835 = 1.0;
double r20551836 = r20551834 - r20551835;
double r20551837 = r20551833 / r20551836;
double r20551838 = 2.279321042838855e-104;
bool r20551839 = r20551828 <= r20551838;
double r20551840 = r20551832 * r20551828;
double r20551841 = r20551831 - r20551828;
double r20551842 = r20551831 / r20551841;
double r20551843 = r20551840 * r20551842;
double r20551844 = r20551839 ? r20551843 : r20551837;
double r20551845 = r20551830 ? r20551837 : r20551844;
return r20551845;
}




Bits error versus x




Bits error versus y
Results
| Original | 14.6 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
if y < -1.4392061780489917e-16 or 2.279321042838855e-104 < y Initial program 13.5
rmApplied associate-/l*0.6
rmApplied div-sub0.6
Simplified0.6
if -1.4392061780489917e-16 < y < 2.279321042838855e-104Initial program 16.4
rmApplied associate-/l*17.5
rmApplied div-inv17.6
Applied times-frac0.3
Simplified0.0
Final simplification0.4
herbie shell --seed 2019165
(FPCore (x y)
:name "Linear.Projection:perspective from linear-1.19.1.3, B"
: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)))