\frac{x + y}{\left(x \cdot 2\right) \cdot y}\begin{array}{l}
\mathbf{if}\;x \le -5.2211876626416346 \cdot 10^{-12}:\\
\;\;\;\;\frac{x + y}{x \cdot 2} \cdot \frac{1}{y}\\
\mathbf{elif}\;x \le 9.43358736000154189 \cdot 10^{-18}:\\
\;\;\;\;\frac{\frac{1}{x}}{\frac{y}{\frac{x + y}{2}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(0.5, \frac{y}{x}, 0.5\right)}{y}\\
\end{array}double f(double x, double y) {
double r537475 = x;
double r537476 = y;
double r537477 = r537475 + r537476;
double r537478 = 2.0;
double r537479 = r537475 * r537478;
double r537480 = r537479 * r537476;
double r537481 = r537477 / r537480;
return r537481;
}
double f(double x, double y) {
double r537482 = x;
double r537483 = -5.221187662641635e-12;
bool r537484 = r537482 <= r537483;
double r537485 = y;
double r537486 = r537482 + r537485;
double r537487 = 2.0;
double r537488 = r537482 * r537487;
double r537489 = r537486 / r537488;
double r537490 = 1.0;
double r537491 = r537490 / r537485;
double r537492 = r537489 * r537491;
double r537493 = 9.433587360001542e-18;
bool r537494 = r537482 <= r537493;
double r537495 = r537490 / r537482;
double r537496 = r537486 / r537487;
double r537497 = r537485 / r537496;
double r537498 = r537495 / r537497;
double r537499 = 0.5;
double r537500 = r537485 / r537482;
double r537501 = fma(r537499, r537500, r537499);
double r537502 = r537501 / r537485;
double r537503 = r537494 ? r537498 : r537502;
double r537504 = r537484 ? r537492 : r537503;
return r537504;
}




Bits error versus x




Bits error versus y
| Original | 15.3 |
|---|---|
| Target | 0.0 |
| Herbie | 0.1 |
if x < -5.221187662641635e-12Initial program 15.5
rmApplied associate-/r*0.2
rmApplied div-inv0.2
if -5.221187662641635e-12 < x < 9.433587360001542e-18Initial program 15.5
rmApplied associate-/r*16.6
rmApplied *-un-lft-identity16.6
Applied times-frac16.6
Applied associate-/l*0.1
if 9.433587360001542e-18 < x Initial program 14.6
rmApplied associate-/r*0.2
Taylor expanded around 0 0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2020025 +o rules:numerics
(FPCore (x y)
:name "Linear.Projection:inversePerspective from linear-1.19.1.3, C"
:precision binary64
:herbie-target
(+ (/ 0.5 x) (/ 0.5 y))
(/ (+ x y) (* (* x 2) y)))