\frac{x \cdot 2}{y \cdot z - t \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -2.776525036283727903159592037753472003598 \cdot 10^{53}:\\
\;\;\;\;\frac{x}{z} \cdot \frac{2}{y - t}\\
\mathbf{elif}\;z \le 2.268898200027105692764604438597941804545 \cdot 10^{-8}:\\
\;\;\;\;\frac{x \cdot 2}{z \cdot \left(y - t\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \frac{2}{y - t}}{z}\\
\end{array}double f(double x, double y, double z, double t) {
double r345860 = x;
double r345861 = 2.0;
double r345862 = r345860 * r345861;
double r345863 = y;
double r345864 = z;
double r345865 = r345863 * r345864;
double r345866 = t;
double r345867 = r345866 * r345864;
double r345868 = r345865 - r345867;
double r345869 = r345862 / r345868;
return r345869;
}
double f(double x, double y, double z, double t) {
double r345870 = z;
double r345871 = -2.776525036283728e+53;
bool r345872 = r345870 <= r345871;
double r345873 = x;
double r345874 = r345873 / r345870;
double r345875 = 2.0;
double r345876 = y;
double r345877 = t;
double r345878 = r345876 - r345877;
double r345879 = r345875 / r345878;
double r345880 = r345874 * r345879;
double r345881 = 2.2688982000271057e-08;
bool r345882 = r345870 <= r345881;
double r345883 = r345873 * r345875;
double r345884 = r345870 * r345878;
double r345885 = r345883 / r345884;
double r345886 = r345873 * r345879;
double r345887 = r345886 / r345870;
double r345888 = r345882 ? r345885 : r345887;
double r345889 = r345872 ? r345880 : r345888;
return r345889;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.8 |
|---|---|
| Target | 2.0 |
| Herbie | 2.3 |
if z < -2.776525036283728e+53Initial program 12.4
Simplified10.0
rmApplied times-frac2.0
if -2.776525036283728e+53 < z < 2.2688982000271057e-08Initial program 2.4
Simplified2.4
if 2.2688982000271057e-08 < z Initial program 10.0
Simplified8.2
rmApplied times-frac2.0
rmApplied associate-*l/2.2
Final simplification2.3
herbie shell --seed 2019304
(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))))