\frac{x \cdot 2}{y \cdot z - t \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -1.203051458868204248929927667100891904761 \cdot 10^{-188}:\\
\;\;\;\;\frac{2}{\left(y - t\right) \cdot \frac{z}{x}}\\
\mathbf{elif}\;z \le 159542798525938902160490191565805846528:\\
\;\;\;\;\frac{2 \cdot x}{z \cdot \left(y - t\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{2 \cdot x}{z}}{y - t}\\
\end{array}double f(double x, double y, double z, double t) {
double r436832 = x;
double r436833 = 2.0;
double r436834 = r436832 * r436833;
double r436835 = y;
double r436836 = z;
double r436837 = r436835 * r436836;
double r436838 = t;
double r436839 = r436838 * r436836;
double r436840 = r436837 - r436839;
double r436841 = r436834 / r436840;
return r436841;
}
double f(double x, double y, double z, double t) {
double r436842 = z;
double r436843 = -1.2030514588682042e-188;
bool r436844 = r436842 <= r436843;
double r436845 = 2.0;
double r436846 = y;
double r436847 = t;
double r436848 = r436846 - r436847;
double r436849 = x;
double r436850 = r436842 / r436849;
double r436851 = r436848 * r436850;
double r436852 = r436845 / r436851;
double r436853 = 1.595427985259389e+38;
bool r436854 = r436842 <= r436853;
double r436855 = r436845 * r436849;
double r436856 = r436842 * r436848;
double r436857 = r436855 / r436856;
double r436858 = r436855 / r436842;
double r436859 = r436858 / r436848;
double r436860 = r436854 ? r436857 : r436859;
double r436861 = r436844 ? r436852 : r436860;
return r436861;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.0 |
|---|---|
| Target | 2.2 |
| Herbie | 3.0 |
if z < -1.2030514588682042e-188Initial program 7.1
Simplified3.6
rmApplied associate-/r*3.5
rmApplied div-inv3.5
Applied associate-/l*3.9
Simplified3.6
if -1.2030514588682042e-188 < z < 1.595427985259389e+38Initial program 2.9
Simplified10.2
rmApplied associate-/r*10.9
Taylor expanded around 0 10.8
Simplified10.8
rmApplied div-inv10.8
Applied associate-/l*2.9
Simplified2.9
if 1.595427985259389e+38 < z Initial program 12.7
Simplified3.0
rmApplied associate-/r*2.5
Taylor expanded around 0 2.2
Simplified2.3
Final simplification3.0
herbie shell --seed 2019196 +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))))