\frac{\left(x \cdot 2\right) \cdot y}{x - y}\begin{array}{l}
\mathbf{if}\;x \le -5.795611421145836744402935774403637790937 \cdot 10^{-17} \lor \neg \left(x \le 3.247588547814785746124721995699073933232 \cdot 10^{-105}\right):\\
\;\;\;\;\left(y \cdot 2\right) \cdot \frac{x}{x - y}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\frac{\frac{x}{y} - 1}{2}}{x}}\\
\end{array}double f(double x, double y) {
double r543068 = x;
double r543069 = 2.0;
double r543070 = r543068 * r543069;
double r543071 = y;
double r543072 = r543070 * r543071;
double r543073 = r543068 - r543071;
double r543074 = r543072 / r543073;
return r543074;
}
double f(double x, double y) {
double r543075 = x;
double r543076 = -5.795611421145837e-17;
bool r543077 = r543075 <= r543076;
double r543078 = 3.2475885478147857e-105;
bool r543079 = r543075 <= r543078;
double r543080 = !r543079;
bool r543081 = r543077 || r543080;
double r543082 = y;
double r543083 = 2.0;
double r543084 = r543082 * r543083;
double r543085 = r543075 - r543082;
double r543086 = r543075 / r543085;
double r543087 = r543084 * r543086;
double r543088 = 1.0;
double r543089 = r543075 / r543082;
double r543090 = r543089 - r543088;
double r543091 = r543090 / r543083;
double r543092 = r543091 / r543075;
double r543093 = r543088 / r543092;
double r543094 = r543081 ? r543087 : r543093;
return r543094;
}




Bits error versus x




Bits error versus y
Results
| Original | 14.9 |
|---|---|
| Target | 0.4 |
| Herbie | 0.5 |
if x < -5.795611421145837e-17 or 3.2475885478147857e-105 < x Initial program 14.4
Simplified12.6
rmApplied div-inv12.7
Applied times-frac0.8
Simplified0.7
if -5.795611421145837e-17 < x < 3.2475885478147857e-105Initial program 15.6
Simplified0.0
rmApplied clear-num0.2
Simplified0.2
Final simplification0.5
herbie shell --seed 2019174 +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)))