\left(x \cdot y - z \cdot y\right) \cdot t
\begin{array}{l}
\mathbf{if}\;x \cdot y - z \cdot y \le -5.2825142284684672 \cdot 10^{125} \lor \neg \left(x \cdot y - z \cdot y \le 3.0182044239998063 \cdot 10^{117}\right):\\
\;\;\;\;1 \cdot \left(\left(t \cdot y\right) \cdot \left(x - z\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x, y, -z \cdot y\right) \cdot t\\
\end{array}double f(double x, double y, double z, double t) {
double r510826 = x;
double r510827 = y;
double r510828 = r510826 * r510827;
double r510829 = z;
double r510830 = r510829 * r510827;
double r510831 = r510828 - r510830;
double r510832 = t;
double r510833 = r510831 * r510832;
return r510833;
}
double f(double x, double y, double z, double t) {
double r510834 = x;
double r510835 = y;
double r510836 = r510834 * r510835;
double r510837 = z;
double r510838 = r510837 * r510835;
double r510839 = r510836 - r510838;
double r510840 = -5.282514228468467e+125;
bool r510841 = r510839 <= r510840;
double r510842 = 3.0182044239998063e+117;
bool r510843 = r510839 <= r510842;
double r510844 = !r510843;
bool r510845 = r510841 || r510844;
double r510846 = 1.0;
double r510847 = t;
double r510848 = r510847 * r510835;
double r510849 = r510834 - r510837;
double r510850 = r510848 * r510849;
double r510851 = r510846 * r510850;
double r510852 = -r510838;
double r510853 = fma(r510834, r510835, r510852);
double r510854 = r510853 * r510847;
double r510855 = r510845 ? r510851 : r510854;
return r510855;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.9 |
|---|---|
| Target | 3.2 |
| Herbie | 2.2 |
if (- (* x y) (* z y)) < -5.282514228468467e+125 or 3.0182044239998063e+117 < (- (* x y) (* z y)) Initial program 17.9
rmApplied *-un-lft-identity17.9
Applied associate-*l*17.9
Simplified2.7
if -5.282514228468467e+125 < (- (* x y) (* z y)) < 3.0182044239998063e+117Initial program 1.9
rmApplied fma-neg1.9
Final simplification2.2
herbie shell --seed 2020056 +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))