\left(x \cdot y - z \cdot y\right) \cdot t
\begin{array}{l}
\mathbf{if}\;t \le -72371502441248638107648:\\
\;\;\;\;\left(t \cdot y\right) \cdot \left(x - z\right)\\
\mathbf{elif}\;t \le 17693630633187516781772668928:\\
\;\;\;\;\left(1 \cdot \left(\left(x - z\right) \cdot t\right)\right) \cdot y + \left(y \cdot \mathsf{fma}\left(-z, 1, z\right)\right) \cdot t\\
\mathbf{else}:\\
\;\;\;\;t \cdot \left(y \cdot \left(x - z\right)\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r561663 = x;
double r561664 = y;
double r561665 = r561663 * r561664;
double r561666 = z;
double r561667 = r561666 * r561664;
double r561668 = r561665 - r561667;
double r561669 = t;
double r561670 = r561668 * r561669;
return r561670;
}
double f(double x, double y, double z, double t) {
double r561671 = t;
double r561672 = -7.237150244124864e+22;
bool r561673 = r561671 <= r561672;
double r561674 = y;
double r561675 = r561671 * r561674;
double r561676 = x;
double r561677 = z;
double r561678 = r561676 - r561677;
double r561679 = r561675 * r561678;
double r561680 = 1.7693630633187517e+28;
bool r561681 = r561671 <= r561680;
double r561682 = 1.0;
double r561683 = r561678 * r561671;
double r561684 = r561682 * r561683;
double r561685 = r561684 * r561674;
double r561686 = -r561677;
double r561687 = fma(r561686, r561682, r561677);
double r561688 = r561674 * r561687;
double r561689 = r561688 * r561671;
double r561690 = r561685 + r561689;
double r561691 = r561674 * r561678;
double r561692 = r561671 * r561691;
double r561693 = r561681 ? r561690 : r561692;
double r561694 = r561673 ? r561679 : r561693;
return r561694;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.3 |
|---|---|
| Target | 3.1 |
| Herbie | 2.6 |
if t < -7.237150244124864e+22Initial program 3.9
Simplified3.9
rmApplied associate-*r*4.3
if -7.237150244124864e+22 < t < 1.7693630633187517e+28Initial program 9.1
Simplified9.1
rmApplied add-cube-cbrt9.5
Applied add-cube-cbrt9.9
Applied prod-diff9.9
Applied distribute-lft-in9.9
Applied distribute-lft-in9.9
Simplified6.7
Simplified2.4
rmApplied *-un-lft-identity2.4
Applied associate-*l*2.4
Simplified1.9
if 1.7693630633187517e+28 < t Initial program 3.7
Simplified3.7
Final simplification2.6
herbie shell --seed 2020001 +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))