\frac{x \cdot 2}{y \cdot z - t \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -4.00904334297314605 \cdot 10^{-54} \lor \neg \left(z \le 35899075.9933054224\right):\\
\;\;\;\;\frac{\frac{x \cdot 2}{z}}{y - t}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot 2}{z \cdot \left(y - t\right)}\\
\end{array}double f(double x, double y, double z, double t) {
double r427897 = x;
double r427898 = 2.0;
double r427899 = r427897 * r427898;
double r427900 = y;
double r427901 = z;
double r427902 = r427900 * r427901;
double r427903 = t;
double r427904 = r427903 * r427901;
double r427905 = r427902 - r427904;
double r427906 = r427899 / r427905;
return r427906;
}
double f(double x, double y, double z, double t) {
double r427907 = z;
double r427908 = -4.009043342973146e-54;
bool r427909 = r427907 <= r427908;
double r427910 = 35899075.99330542;
bool r427911 = r427907 <= r427910;
double r427912 = !r427911;
bool r427913 = r427909 || r427912;
double r427914 = x;
double r427915 = 2.0;
double r427916 = r427914 * r427915;
double r427917 = r427916 / r427907;
double r427918 = y;
double r427919 = t;
double r427920 = r427918 - r427919;
double r427921 = r427917 / r427920;
double r427922 = r427907 * r427920;
double r427923 = r427916 / r427922;
double r427924 = r427913 ? r427921 : r427923;
return r427924;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.1 |
|---|---|
| Target | 2.2 |
| Herbie | 2.4 |
if z < -4.009043342973146e-54 or 35899075.99330542 < z Initial program 10.3
Simplified8.6
rmApplied associate-/r*2.0
if -4.009043342973146e-54 < z < 35899075.99330542Initial program 2.8
Simplified2.8
rmApplied div-inv3.1
rmApplied add-cube-cbrt3.1
Applied times-frac3.2
Simplified3.2
Simplified3.2
rmApplied frac-times3.1
Applied associate-*r/2.8
Simplified2.8
Final simplification2.4
herbie shell --seed 2019199 +o rules:numerics
(FPCore (x y z t)
:name "Linear.Projection:infinitePerspective from linear-1.19.1.3, A"
:herbie-target
(if (< (/ (* x 2.0) (- (* y z) (* t z))) -2.559141628295061e-13) (* (/ x (* (- y t) z)) 2.0) (if (< (/ (* x 2.0) (- (* y z) (* t z))) 1.045027827330126e-269) (/ (* (/ x z) 2.0) (- y t)) (* (/ x (* (- y t) z)) 2.0)))
(/ (* x 2.0) (- (* y z) (* t z))))