\frac{x \cdot 2}{y \cdot z - t \cdot z}\begin{array}{l}
\mathbf{if}\;x \le -2.785623242383369987871892505209292076841 \cdot 10^{-67}:\\
\;\;\;\;\frac{\frac{2 \cdot x}{y - t}}{z}\\
\mathbf{elif}\;x \le 2.564279827638175653187139986421665920809 \cdot 10^{-14}:\\
\;\;\;\;\frac{2 \cdot x}{z \cdot \left(y - t\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{2 \cdot x}{y - t}}{z}\\
\end{array}double f(double x, double y, double z, double t) {
double r24730913 = x;
double r24730914 = 2.0;
double r24730915 = r24730913 * r24730914;
double r24730916 = y;
double r24730917 = z;
double r24730918 = r24730916 * r24730917;
double r24730919 = t;
double r24730920 = r24730919 * r24730917;
double r24730921 = r24730918 - r24730920;
double r24730922 = r24730915 / r24730921;
return r24730922;
}
double f(double x, double y, double z, double t) {
double r24730923 = x;
double r24730924 = -2.78562324238337e-67;
bool r24730925 = r24730923 <= r24730924;
double r24730926 = 2.0;
double r24730927 = r24730926 * r24730923;
double r24730928 = y;
double r24730929 = t;
double r24730930 = r24730928 - r24730929;
double r24730931 = r24730927 / r24730930;
double r24730932 = z;
double r24730933 = r24730931 / r24730932;
double r24730934 = 2.5642798276381757e-14;
bool r24730935 = r24730923 <= r24730934;
double r24730936 = r24730932 * r24730930;
double r24730937 = r24730927 / r24730936;
double r24730938 = r24730935 ? r24730937 : r24730933;
double r24730939 = r24730925 ? r24730933 : r24730938;
return r24730939;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.7 |
|---|---|
| Target | 2.2 |
| Herbie | 2.4 |
if x < -2.78562324238337e-67 or 2.5642798276381757e-14 < x Initial program 9.7
Simplified9.2
rmApplied associate-*r/2.6
rmApplied *-un-lft-identity2.6
Applied associate-/r*2.6
Simplified2.6
if -2.78562324238337e-67 < x < 2.5642798276381757e-14Initial program 3.3
Simplified2.0
rmApplied frac-times2.2
Final simplification2.4
herbie shell --seed 2019192
(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))))