\left(x \cdot y - z \cdot y\right) \cdot t
\begin{array}{l}
\mathbf{if}\;y \le -24528.73585804069443838670849800109863281:\\
\;\;\;\;\left(t \cdot y\right) \cdot \left(x - z\right)\\
\mathbf{elif}\;y \le 2.583080580921436072391451137817466644029 \cdot 10^{67}:\\
\;\;\;\;\left(y \cdot \left(x - z\right)\right) \cdot t\\
\mathbf{else}:\\
\;\;\;\;y \cdot \left(\left(x - z\right) \cdot t\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r359027 = x;
double r359028 = y;
double r359029 = r359027 * r359028;
double r359030 = z;
double r359031 = r359030 * r359028;
double r359032 = r359029 - r359031;
double r359033 = t;
double r359034 = r359032 * r359033;
return r359034;
}
double f(double x, double y, double z, double t) {
double r359035 = y;
double r359036 = -24528.735858040694;
bool r359037 = r359035 <= r359036;
double r359038 = t;
double r359039 = r359038 * r359035;
double r359040 = x;
double r359041 = z;
double r359042 = r359040 - r359041;
double r359043 = r359039 * r359042;
double r359044 = 2.583080580921436e+67;
bool r359045 = r359035 <= r359044;
double r359046 = r359035 * r359042;
double r359047 = r359046 * r359038;
double r359048 = r359042 * r359038;
double r359049 = r359035 * r359048;
double r359050 = r359045 ? r359047 : r359049;
double r359051 = r359037 ? r359043 : r359050;
return r359051;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.2 |
|---|---|
| Target | 3.2 |
| Herbie | 3.0 |
if y < -24528.735858040694Initial program 15.9
Simplified15.9
rmApplied pow115.9
Applied pow115.9
Applied pow115.9
Applied pow-prod-down15.9
Applied pow-prod-down15.9
Simplified3.4
rmApplied add-cube-cbrt4.4
Applied associate-*l*4.4
rmApplied add-cube-cbrt4.7
Taylor expanded around inf 15.9
Simplified4.5
if -24528.735858040694 < y < 2.583080580921436e+67Initial program 2.4
Simplified2.4
if 2.583080580921436e+67 < y Initial program 19.4
Simplified19.4
rmApplied pow119.4
Applied pow119.4
Applied pow119.4
Applied pow-prod-down19.4
Applied pow-prod-down19.4
Simplified4.0
Final simplification3.0
herbie shell --seed 2019323 +o rules:numerics
(FPCore (x y z t)
:name "Linear.Projection:inverseInfinitePerspective from linear-1.19.1.3"
:precision binary64
:herbie-target
(if (< t -9.231879582886777e-80) (* (* y t) (- x z)) (if (< t 2.543067051564877e+83) (* y (* t (- x z))) (* (* y (- x z)) t)))
(* (- (* x y) (* z y)) t))