\frac{x \cdot 2}{y \cdot z - t \cdot z}\begin{array}{l}
\mathbf{if}\;x \le -0.031032483723507254 \lor \neg \left(x \le 3.6948490856919295 \cdot 10^{-142}\right):\\
\;\;\;\;\frac{1}{z} \cdot \frac{x}{\frac{y - t}{2}}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{\frac{2}{y - t}}{z}\\
\end{array}double f(double x, double y, double z, double t) {
double r477447 = x;
double r477448 = 2.0;
double r477449 = r477447 * r477448;
double r477450 = y;
double r477451 = z;
double r477452 = r477450 * r477451;
double r477453 = t;
double r477454 = r477453 * r477451;
double r477455 = r477452 - r477454;
double r477456 = r477449 / r477455;
return r477456;
}
double f(double x, double y, double z, double t) {
double r477457 = x;
double r477458 = -0.031032483723507254;
bool r477459 = r477457 <= r477458;
double r477460 = 3.6948490856919295e-142;
bool r477461 = r477457 <= r477460;
double r477462 = !r477461;
bool r477463 = r477459 || r477462;
double r477464 = 1.0;
double r477465 = z;
double r477466 = r477464 / r477465;
double r477467 = y;
double r477468 = t;
double r477469 = r477467 - r477468;
double r477470 = 2.0;
double r477471 = r477469 / r477470;
double r477472 = r477457 / r477471;
double r477473 = r477466 * r477472;
double r477474 = r477470 / r477469;
double r477475 = r477474 / r477465;
double r477476 = r477457 * r477475;
double r477477 = r477463 ? r477473 : r477476;
return r477477;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.9 |
|---|---|
| Target | 2.1 |
| Herbie | 2.7 |
if x < -0.031032483723507254 or 3.6948490856919295e-142 < x Initial program 9.5
Simplified8.5
rmApplied *-un-lft-identity8.5
Applied times-frac8.5
Applied *-un-lft-identity8.5
Applied times-frac3.0
Simplified3.0
if -0.031032483723507254 < x < 3.6948490856919295e-142Initial program 3.3
Simplified2.0
rmApplied div-inv2.3
Simplified2.3
Final simplification2.7
herbie shell --seed 2020021
(FPCore (x y z t)
:name "Linear.Projection:infinitePerspective from linear-1.19.1.3, A"
:precision binary64
:herbie-target
(if (< (/ (* x 2) (- (* y z) (* t z))) -2.559141628295061e-13) (* (/ x (* (- y t) z)) 2) (if (< (/ (* x 2) (- (* y z) (* t z))) 1.0450278273301259e-269) (/ (* (/ x z) 2) (- y t)) (* (/ x (* (- y t) z)) 2)))
(/ (* x 2) (- (* y z) (* t z))))