\left(x \cdot y - z \cdot y\right) \cdot t
\begin{array}{l}
\mathbf{if}\;y \le -3.94909527960306767 \cdot 10^{55}:\\
\;\;\;\;\left(t \cdot x\right) \cdot y + \left(t \cdot \left(-z\right)\right) \cdot y\\
\mathbf{elif}\;y \le 128456623504321050000:\\
\;\;\;\;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 code(double x, double y, double z, double t) {
return (((x * y) - (z * y)) * t);
}
double code(double x, double y, double z, double t) {
double VAR;
if ((y <= -3.9490952796030677e+55)) {
VAR = (((t * x) * y) + ((t * -z) * y));
} else {
double VAR_1;
if ((y <= 1.2845662350432105e+20)) {
VAR_1 = ((t * (x * y)) + (t * (-z * y)));
} else {
VAR_1 = ((t * y) * (x - z));
}
VAR = VAR_1;
}
return VAR;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.1 |
|---|---|
| Target | 3.0 |
| Herbie | 2.8 |
if y < -3.9490952796030677e+55Initial program 18.9
Simplified18.9
rmApplied sub-neg18.9
Applied distribute-lft-in18.9
Applied distribute-lft-in18.9
Simplified18.9
Simplified18.9
rmApplied associate-*r*12.5
rmApplied associate-*r*3.2
if -3.9490952796030677e+55 < y < 1.2845662350432105e+20Initial program 2.2
Simplified2.2
rmApplied sub-neg2.2
Applied distribute-lft-in2.2
Applied distribute-lft-in2.2
Simplified2.2
Simplified2.2
if 1.2845662350432105e+20 < y Initial program 16.3
Simplified16.3
rmApplied associate-*r*4.6
Final simplification2.8
herbie shell --seed 2020105
(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))