\frac{\left(x \cdot 2\right) \cdot y}{x - y}\begin{array}{l}
\mathbf{if}\;x \le -1.7538803200316063 \cdot 10^{49} \lor \neg \left(x \le 2.59687826800368321 \cdot 10^{-23}\right):\\
\;\;\;\;\frac{x}{x - y} \cdot \left(y \cdot 2\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot 2}{1 \cdot \left(\frac{x}{y} - 1\right)}\\
\end{array}double f(double x, double y) {
double r455310 = x;
double r455311 = 2.0;
double r455312 = r455310 * r455311;
double r455313 = y;
double r455314 = r455312 * r455313;
double r455315 = r455310 - r455313;
double r455316 = r455314 / r455315;
return r455316;
}
double f(double x, double y) {
double r455317 = x;
double r455318 = -1.7538803200316063e+49;
bool r455319 = r455317 <= r455318;
double r455320 = 2.5968782680036832e-23;
bool r455321 = r455317 <= r455320;
double r455322 = !r455321;
bool r455323 = r455319 || r455322;
double r455324 = y;
double r455325 = r455317 - r455324;
double r455326 = r455317 / r455325;
double r455327 = 2.0;
double r455328 = r455324 * r455327;
double r455329 = r455326 * r455328;
double r455330 = r455317 * r455327;
double r455331 = 1.0;
double r455332 = r455317 / r455324;
double r455333 = r455332 - r455331;
double r455334 = r455331 * r455333;
double r455335 = r455330 / r455334;
double r455336 = r455323 ? r455329 : r455335;
return r455336;
}




Bits error versus x




Bits error versus y
Results
| Original | 15.2 |
|---|---|
| Target | 0.4 |
| Herbie | 0.2 |
if x < -1.7538803200316063e+49 or 2.5968782680036832e-23 < x Initial program 16.5
rmApplied associate-/l*15.6
rmApplied div-inv15.8
Applied times-frac0.3
Simplified0.1
if -1.7538803200316063e+49 < x < 2.5968782680036832e-23Initial program 13.9
rmApplied associate-/l*0.2
rmApplied *-un-lft-identity0.2
Applied *-un-lft-identity0.2
Applied times-frac0.2
Simplified0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020064 +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)))