\frac{\left(x \cdot 2\right) \cdot y}{x - y}\begin{array}{l}
\mathbf{if}\;y \le -11894198345334408230327762615508217626620:\\
\;\;\;\;\left(x \cdot 2\right) \cdot \frac{y}{x - y}\\
\mathbf{elif}\;y \le 3.827108002628365811088571233801504531292 \cdot 10^{68}:\\
\;\;\;\;\frac{x}{x - y} \cdot \left(y \cdot 2\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot 2}{\frac{x - y}{y}}\\
\end{array}double f(double x, double y) {
double r420212 = x;
double r420213 = 2.0;
double r420214 = r420212 * r420213;
double r420215 = y;
double r420216 = r420214 * r420215;
double r420217 = r420212 - r420215;
double r420218 = r420216 / r420217;
return r420218;
}
double f(double x, double y) {
double r420219 = y;
double r420220 = -1.1894198345334408e+40;
bool r420221 = r420219 <= r420220;
double r420222 = x;
double r420223 = 2.0;
double r420224 = r420222 * r420223;
double r420225 = r420222 - r420219;
double r420226 = r420219 / r420225;
double r420227 = r420224 * r420226;
double r420228 = 3.827108002628366e+68;
bool r420229 = r420219 <= r420228;
double r420230 = r420222 / r420225;
double r420231 = r420219 * r420223;
double r420232 = r420230 * r420231;
double r420233 = r420225 / r420219;
double r420234 = r420224 / r420233;
double r420235 = r420229 ? r420232 : r420234;
double r420236 = r420221 ? r420227 : r420235;
return r420236;
}




Bits error versus x




Bits error versus y
Results
| Original | 14.9 |
|---|---|
| Target | 0.4 |
| Herbie | 0.2 |
if y < -1.1894198345334408e+40Initial program 18.3
rmApplied *-un-lft-identity18.3
Applied times-frac0.2
Simplified0.2
if -1.1894198345334408e+40 < y < 3.827108002628366e+68Initial program 11.9
rmApplied associate-/l*12.7
rmApplied div-inv12.8
Applied times-frac0.5
Simplified0.3
if 3.827108002628366e+68 < y Initial program 20.2
rmApplied associate-/l*0.1
Final simplification0.2
herbie shell --seed 2020001 +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)))