\frac{\left(x \cdot 2\right) \cdot y}{x - y}\begin{array}{l}
\mathbf{if}\;y \le -6.30586821746719046822219898487595819847 \cdot 10^{45}:\\
\;\;\;\;\frac{y}{x - y} \cdot \left(x \cdot 2\right)\\
\mathbf{elif}\;y \le 5.377814118926896018584556610780517528545 \cdot 10^{-32}:\\
\;\;\;\;\frac{x}{x - y} \cdot \left(2 \cdot y\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{y}{x - y} \cdot \left(x \cdot 2\right)\\
\end{array}double f(double x, double y) {
double r29518902 = x;
double r29518903 = 2.0;
double r29518904 = r29518902 * r29518903;
double r29518905 = y;
double r29518906 = r29518904 * r29518905;
double r29518907 = r29518902 - r29518905;
double r29518908 = r29518906 / r29518907;
return r29518908;
}
double f(double x, double y) {
double r29518909 = y;
double r29518910 = -6.30586821746719e+45;
bool r29518911 = r29518909 <= r29518910;
double r29518912 = x;
double r29518913 = r29518912 - r29518909;
double r29518914 = r29518909 / r29518913;
double r29518915 = 2.0;
double r29518916 = r29518912 * r29518915;
double r29518917 = r29518914 * r29518916;
double r29518918 = 5.377814118926896e-32;
bool r29518919 = r29518909 <= r29518918;
double r29518920 = r29518912 / r29518913;
double r29518921 = r29518915 * r29518909;
double r29518922 = r29518920 * r29518921;
double r29518923 = r29518919 ? r29518922 : r29518917;
double r29518924 = r29518911 ? r29518917 : r29518923;
return r29518924;
}




Bits error versus x




Bits error versus y
Results
| Original | 15.1 |
|---|---|
| Target | 0.4 |
| Herbie | 0.1 |
if y < -6.30586821746719e+45 or 5.377814118926896e-32 < y Initial program 16.7
rmApplied *-un-lft-identity16.7
Applied times-frac0.1
Simplified0.1
if -6.30586821746719e+45 < y < 5.377814118926896e-32Initial program 13.6
rmApplied associate-/l*14.8
rmApplied div-inv14.9
Applied times-frac0.3
Simplified0.1
Final simplification0.1
herbie shell --seed 2019171
(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)))