\left(x \cdot y - z \cdot y\right) \cdot t
\begin{array}{l}
\mathbf{if}\;y \le -2.977769295145242659502504364676573176105 \cdot 10^{-72}:\\
\;\;\;\;\left(t \cdot x\right) \cdot y + t \cdot \left(\left(-z\right) \cdot y\right)\\
\mathbf{elif}\;y \le 1.329938031514973749605620809522139604149 \cdot 10^{99}:\\
\;\;\;\;\left(\sqrt[3]{t \cdot \left(x \cdot y\right)} \cdot \sqrt[3]{t \cdot \left(x \cdot y\right)}\right) \cdot \sqrt[3]{t \cdot \left(x \cdot y\right)} + t \cdot \left(\left(-z\right) \cdot y\right)\\
\mathbf{else}:\\
\;\;\;\;\left(t \cdot y\right) \cdot \left(x - z\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r507727 = x;
double r507728 = y;
double r507729 = r507727 * r507728;
double r507730 = z;
double r507731 = r507730 * r507728;
double r507732 = r507729 - r507731;
double r507733 = t;
double r507734 = r507732 * r507733;
return r507734;
}
double f(double x, double y, double z, double t) {
double r507735 = y;
double r507736 = -2.9777692951452427e-72;
bool r507737 = r507735 <= r507736;
double r507738 = t;
double r507739 = x;
double r507740 = r507738 * r507739;
double r507741 = r507740 * r507735;
double r507742 = z;
double r507743 = -r507742;
double r507744 = r507743 * r507735;
double r507745 = r507738 * r507744;
double r507746 = r507741 + r507745;
double r507747 = 1.3299380315149737e+99;
bool r507748 = r507735 <= r507747;
double r507749 = r507739 * r507735;
double r507750 = r507738 * r507749;
double r507751 = cbrt(r507750);
double r507752 = r507751 * r507751;
double r507753 = r507752 * r507751;
double r507754 = r507753 + r507745;
double r507755 = r507738 * r507735;
double r507756 = r507739 - r507742;
double r507757 = r507755 * r507756;
double r507758 = r507748 ? r507754 : r507757;
double r507759 = r507737 ? r507746 : r507758;
return r507759;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.0 |
|---|---|
| Target | 3.0 |
| Herbie | 4.5 |
if y < -2.9777692951452427e-72Initial program 11.5
Simplified11.5
rmApplied sub-neg11.5
Applied distribute-lft-in11.5
Applied distribute-lft-in11.5
Simplified11.5
Simplified11.5
rmApplied associate-*r*7.7
if -2.9777692951452427e-72 < y < 1.3299380315149737e+99Initial program 2.7
Simplified2.7
rmApplied sub-neg2.7
Applied distribute-lft-in2.7
Applied distribute-lft-in2.7
Simplified2.7
Simplified2.7
rmApplied add-cube-cbrt3.1
if 1.3299380315149737e+99 < y Initial program 21.5
Simplified21.5
rmApplied associate-*r*5.2
Final simplification4.5
herbie shell --seed 2019353
(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))