\frac{x \cdot 2}{y \cdot z - t \cdot z}\begin{array}{l}
\mathbf{if}\;x \cdot 2 \le -7.239284083966433340971141087068091802766 \cdot 10^{62} \lor \neg \left(x \cdot 2 \le 3.757552955654937149870253387206513889626 \cdot 10^{-155}\right):\\
\;\;\;\;\frac{\frac{x \cdot 2}{y - t}}{z}\\
\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 r342856 = x;
double r342857 = 2.0;
double r342858 = r342856 * r342857;
double r342859 = y;
double r342860 = z;
double r342861 = r342859 * r342860;
double r342862 = t;
double r342863 = r342862 * r342860;
double r342864 = r342861 - r342863;
double r342865 = r342858 / r342864;
return r342865;
}
double f(double x, double y, double z, double t) {
double r342866 = x;
double r342867 = 2.0;
double r342868 = r342866 * r342867;
double r342869 = -7.239284083966433e+62;
bool r342870 = r342868 <= r342869;
double r342871 = 3.757552955654937e-155;
bool r342872 = r342868 <= r342871;
double r342873 = !r342872;
bool r342874 = r342870 || r342873;
double r342875 = y;
double r342876 = t;
double r342877 = r342875 - r342876;
double r342878 = r342868 / r342877;
double r342879 = z;
double r342880 = r342878 / r342879;
double r342881 = r342879 * r342877;
double r342882 = r342868 / r342881;
double r342883 = r342874 ? r342880 : r342882;
return r342883;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.8 |
|---|---|
| Target | 2.1 |
| Herbie | 3.0 |
if (* x 2.0) < -7.239284083966433e+62 or 3.757552955654937e-155 < (* x 2.0) Initial program 9.3
Simplified8.5
rmApplied associate-/r*9.1
rmApplied div-inv9.2
rmApplied *-un-lft-identity9.2
Applied associate-*l*9.2
Simplified3.6
if -7.239284083966433e+62 < (* x 2.0) < 3.757552955654937e-155Initial program 3.9
Simplified2.3
rmApplied associate-/r*2.5
rmApplied div-inv2.5
rmApplied *-un-lft-identity2.5
Applied associate-*l*2.5
Simplified7.4
rmApplied div-inv7.4
Applied associate-/l*2.3
Simplified2.3
Final simplification3.0
herbie shell --seed 2019325 +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.045027827330126e-269) (/ (* (/ x z) 2) (- y t)) (* (/ x (* (- y t) z)) 2)))
(/ (* x 2) (- (* y z) (* t z))))