\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 r25174760 = x;
double r25174761 = 2.0;
double r25174762 = r25174760 * r25174761;
double r25174763 = y;
double r25174764 = r25174762 * r25174763;
double r25174765 = r25174760 - r25174763;
double r25174766 = r25174764 / r25174765;
return r25174766;
}
double f(double x, double y) {
double r25174767 = y;
double r25174768 = -1.4392061780489917e-16;
bool r25174769 = r25174767 <= r25174768;
double r25174770 = x;
double r25174771 = 2.0;
double r25174772 = r25174770 * r25174771;
double r25174773 = r25174770 / r25174767;
double r25174774 = 1.0;
double r25174775 = r25174773 - r25174774;
double r25174776 = r25174772 / r25174775;
double r25174777 = 2.279321042838855e-104;
bool r25174778 = r25174767 <= r25174777;
double r25174779 = r25174771 * r25174767;
double r25174780 = r25174770 - r25174767;
double r25174781 = r25174770 / r25174780;
double r25174782 = r25174779 * r25174781;
double r25174783 = r25174778 ? r25174782 : r25174776;
double r25174784 = r25174769 ? r25174776 : r25174783;
return r25174784;
}




Bits error versus x




Bits error versus y
Results
| Original | 15.1 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
if y < -1.4392061780489917e-16 or 2.279321042838855e-104 < y Initial program 14.2
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)))