\left(x \cdot y - z \cdot y\right) \cdot t
\begin{array}{l}
\mathbf{if}\;y \le -1.30679209408064958707058338211786093679 \cdot 10^{99}:\\
\;\;\;\;y \cdot \left(\left(x - z\right) \cdot t\right)\\
\mathbf{elif}\;y \le 3.71994351214166424029575806263346983645 \cdot 10^{-65}:\\
\;\;\;\;\left(y \cdot \left(x - z\right)\right) \cdot t\\
\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 r564790 = x;
double r564791 = y;
double r564792 = r564790 * r564791;
double r564793 = z;
double r564794 = r564793 * r564791;
double r564795 = r564792 - r564794;
double r564796 = t;
double r564797 = r564795 * r564796;
return r564797;
}
double f(double x, double y, double z, double t) {
double r564798 = y;
double r564799 = -1.3067920940806496e+99;
bool r564800 = r564798 <= r564799;
double r564801 = x;
double r564802 = z;
double r564803 = r564801 - r564802;
double r564804 = t;
double r564805 = r564803 * r564804;
double r564806 = r564798 * r564805;
double r564807 = 3.7199435121416642e-65;
bool r564808 = r564798 <= r564807;
double r564809 = r564798 * r564803;
double r564810 = r564809 * r564804;
double r564811 = r564804 * r564798;
double r564812 = r564811 * r564803;
double r564813 = r564808 ? r564810 : r564812;
double r564814 = r564800 ? r564806 : r564813;
return r564814;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.1 |
|---|---|
| Target | 3.1 |
| Herbie | 3.1 |
if y < -1.3067920940806496e+99Initial program 21.6
Simplified21.6
rmApplied associate-*l*4.7
if -1.3067920940806496e+99 < y < 3.7199435121416642e-65Initial program 2.6
Simplified2.6
if 3.7199435121416642e-65 < y Initial program 12.1
Simplified12.1
rmApplied associate-*l*2.8
rmApplied add-cube-cbrt3.8
rmApplied add-cube-cbrt4.1
Applied associate-*l*4.1
Simplified3.8
rmApplied pow13.8
Applied pow13.8
Applied pow13.8
Applied pow-prod-down3.8
Applied pow-prod-down3.8
Applied pow13.8
Applied pow13.8
Applied pow-prod-down3.8
Applied pow-prod-down3.8
Simplified3.7
Final simplification3.1
herbie shell --seed 2019350
(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))