\frac{x \cdot 2}{y \cdot z - t \cdot z}\begin{array}{l}
\mathbf{if}\;x \le -5.6260780497245676 \cdot 10^{34} \lor \neg \left(x \le 3.47347495168652677 \cdot 10^{-84}\right):\\
\;\;\;\;1 \cdot \frac{\frac{x}{\frac{y - t}{2}}}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{x}{z}}{\frac{y - t}{2}}\\
\end{array}double f(double x, double y, double z, double t) {
double r527738 = x;
double r527739 = 2.0;
double r527740 = r527738 * r527739;
double r527741 = y;
double r527742 = z;
double r527743 = r527741 * r527742;
double r527744 = t;
double r527745 = r527744 * r527742;
double r527746 = r527743 - r527745;
double r527747 = r527740 / r527746;
return r527747;
}
double f(double x, double y, double z, double t) {
double r527748 = x;
double r527749 = -5.626078049724568e+34;
bool r527750 = r527748 <= r527749;
double r527751 = 3.4734749516865268e-84;
bool r527752 = r527748 <= r527751;
double r527753 = !r527752;
bool r527754 = r527750 || r527753;
double r527755 = 1.0;
double r527756 = y;
double r527757 = t;
double r527758 = r527756 - r527757;
double r527759 = 2.0;
double r527760 = r527758 / r527759;
double r527761 = r527748 / r527760;
double r527762 = z;
double r527763 = r527761 / r527762;
double r527764 = r527755 * r527763;
double r527765 = r527748 / r527762;
double r527766 = r527765 / r527760;
double r527767 = r527754 ? r527764 : r527766;
return r527767;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.2 |
|---|---|
| Target | 2.2 |
| Herbie | 2.2 |
if x < -5.626078049724568e+34 or 3.4734749516865268e-84 < x Initial program 10.7
Simplified9.8
rmApplied *-un-lft-identity9.8
Applied times-frac9.8
Applied *-un-lft-identity9.8
Applied times-frac2.6
Simplified2.6
rmApplied *-un-lft-identity2.6
Applied associate-*l*2.6
Simplified2.5
if -5.626078049724568e+34 < x < 3.4734749516865268e-84Initial program 3.6
Simplified2.2
rmApplied *-un-lft-identity2.2
Applied times-frac2.2
Applied associate-/r*1.9
Simplified1.9
Final simplification2.2
herbie shell --seed 2020064 +o rules:numerics
(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))))