\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(x - z\right) \cdot \left(t \cdot y\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r583504 = x;
double r583505 = y;
double r583506 = r583504 * r583505;
double r583507 = z;
double r583508 = r583507 * r583505;
double r583509 = r583506 - r583508;
double r583510 = t;
double r583511 = r583509 * r583510;
return r583511;
}
double f(double x, double y, double z, double t) {
double r583512 = y;
double r583513 = -1.3067920940806496e+99;
bool r583514 = r583512 <= r583513;
double r583515 = x;
double r583516 = z;
double r583517 = r583515 - r583516;
double r583518 = t;
double r583519 = r583517 * r583518;
double r583520 = r583512 * r583519;
double r583521 = 3.7199435121416642e-65;
bool r583522 = r583512 <= r583521;
double r583523 = r583512 * r583517;
double r583524 = r583523 * r583518;
double r583525 = r583518 * r583512;
double r583526 = r583517 * r583525;
double r583527 = r583522 ? r583524 : r583526;
double r583528 = r583514 ? r583520 : r583527;
return r583528;
}




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 pow121.6
Applied pow121.6
Applied pow121.6
Applied pow-prod-down21.6
Applied pow-prod-down21.6
Simplified4.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 pow112.1
Applied pow112.1
Applied pow112.1
Applied pow-prod-down12.1
Applied pow-prod-down12.1
Simplified2.8
rmApplied add-cube-cbrt3.8
rmApplied add-cube-cbrt4.1
Applied associate-*l*4.1
Simplified3.8
Taylor expanded around inf 12.1
Simplified3.7
Final simplification3.1
herbie shell --seed 2019350 +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))