\frac{\left(x \cdot 2\right) \cdot y}{x - y}\begin{array}{l}
\mathbf{if}\;y \le -2.5251409834127483 \cdot 10^{52} \lor \neg \left(y \le 1.226684745187438 \cdot 10^{-25}\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 r479850 = x;
double r479851 = 2.0;
double r479852 = r479850 * r479851;
double r479853 = y;
double r479854 = r479852 * r479853;
double r479855 = r479850 - r479853;
double r479856 = r479854 / r479855;
return r479856;
}
double f(double x, double y) {
double r479857 = y;
double r479858 = -2.5251409834127483e+52;
bool r479859 = r479857 <= r479858;
double r479860 = 1.226684745187438e-25;
bool r479861 = r479857 <= r479860;
double r479862 = !r479861;
bool r479863 = r479859 || r479862;
double r479864 = x;
double r479865 = 2.0;
double r479866 = r479864 * r479865;
double r479867 = r479864 - r479857;
double r479868 = r479867 / r479857;
double r479869 = r479866 / r479868;
double r479870 = r479864 / r479867;
double r479871 = r479857 * r479865;
double r479872 = r479870 * r479871;
double r479873 = r479863 ? r479869 : r479872;
return r479873;
}




Bits error versus x




Bits error versus y
Results
| Original | 15.5 |
|---|---|
| Target | 0.4 |
| Herbie | 0.2 |
if y < -2.5251409834127483e+52 or 1.226684745187438e-25 < y Initial program 17.4
rmApplied associate-/l*0.1
if -2.5251409834127483e+52 < y < 1.226684745187438e-25Initial program 13.7
rmApplied associate-/l*14.3
rmApplied div-inv14.4
Applied times-frac0.4
Simplified0.2
Final simplification0.2
herbie shell --seed 2020036 +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)))