\left(x \cdot y - z \cdot y\right) \cdot t
\begin{array}{l}
\mathbf{if}\;y \le -24528.73585804069443838670849800109863281:\\
\;\;\;\;\left(t \cdot y\right) \cdot \left(x - z\right)\\
\mathbf{elif}\;y \le 2.583080580921436072391451137817466644029 \cdot 10^{67}:\\
\;\;\;\;\left(y \cdot \left(x - z\right)\right) \cdot t\\
\mathbf{else}:\\
\;\;\;\;y \cdot \left(\left(x - z\right) \cdot t\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r354400 = x;
double r354401 = y;
double r354402 = r354400 * r354401;
double r354403 = z;
double r354404 = r354403 * r354401;
double r354405 = r354402 - r354404;
double r354406 = t;
double r354407 = r354405 * r354406;
return r354407;
}
double f(double x, double y, double z, double t) {
double r354408 = y;
double r354409 = -24528.735858040694;
bool r354410 = r354408 <= r354409;
double r354411 = t;
double r354412 = r354411 * r354408;
double r354413 = x;
double r354414 = z;
double r354415 = r354413 - r354414;
double r354416 = r354412 * r354415;
double r354417 = 2.583080580921436e+67;
bool r354418 = r354408 <= r354417;
double r354419 = r354408 * r354415;
double r354420 = r354419 * r354411;
double r354421 = r354415 * r354411;
double r354422 = r354408 * r354421;
double r354423 = r354418 ? r354420 : r354422;
double r354424 = r354410 ? r354416 : r354423;
return r354424;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.2 |
|---|---|
| Target | 3.2 |
| Herbie | 3.0 |
if y < -24528.735858040694Initial program 15.9
Simplified15.9
rmApplied associate-*l*3.4
rmApplied add-cube-cbrt4.4
Applied associate-*l*4.4
rmApplied add-cube-cbrt4.7
Taylor expanded around inf 15.9
Simplified4.5
if -24528.735858040694 < y < 2.583080580921436e+67Initial program 2.4
Simplified2.4
if 2.583080580921436e+67 < y Initial program 19.4
Simplified19.4
rmApplied associate-*l*4.0
Final simplification3.0
herbie shell --seed 2019323 +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))