\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 r24413071 = x;
double r24413072 = 2.0;
double r24413073 = r24413071 * r24413072;
double r24413074 = y;
double r24413075 = r24413073 * r24413074;
double r24413076 = r24413071 - r24413074;
double r24413077 = r24413075 / r24413076;
return r24413077;
}
double f(double x, double y) {
double r24413078 = y;
double r24413079 = -1.4392061780489917e-16;
bool r24413080 = r24413078 <= r24413079;
double r24413081 = x;
double r24413082 = 2.0;
double r24413083 = r24413081 * r24413082;
double r24413084 = r24413081 / r24413078;
double r24413085 = 1.0;
double r24413086 = r24413084 - r24413085;
double r24413087 = r24413083 / r24413086;
double r24413088 = 2.279321042838855e-104;
bool r24413089 = r24413078 <= r24413088;
double r24413090 = r24413082 * r24413078;
double r24413091 = r24413081 - r24413078;
double r24413092 = r24413081 / r24413091;
double r24413093 = r24413090 * r24413092;
double r24413094 = r24413089 ? r24413093 : r24413087;
double r24413095 = r24413080 ? r24413087 : r24413094;
return r24413095;
}




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 +o rules:numerics
(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)))