\left(x \cdot y - z \cdot y\right) \cdot t
\begin{array}{l}
\mathbf{if}\;x \cdot y - z \cdot y \le -4.475976711779892361755404204358771985379 \cdot 10^{215} \lor \neg \left(x \cdot y - z \cdot y \le 1.409317556130136785534646521302262345564 \cdot 10^{137}\right):\\
\;\;\;\;\left(x - z\right) \cdot \left(t \cdot y\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot y - z \cdot y\right) \cdot t\\
\end{array}double f(double x, double y, double z, double t) {
double r374253 = x;
double r374254 = y;
double r374255 = r374253 * r374254;
double r374256 = z;
double r374257 = r374256 * r374254;
double r374258 = r374255 - r374257;
double r374259 = t;
double r374260 = r374258 * r374259;
return r374260;
}
double f(double x, double y, double z, double t) {
double r374261 = x;
double r374262 = y;
double r374263 = r374261 * r374262;
double r374264 = z;
double r374265 = r374264 * r374262;
double r374266 = r374263 - r374265;
double r374267 = -4.475976711779892e+215;
bool r374268 = r374266 <= r374267;
double r374269 = 1.4093175561301368e+137;
bool r374270 = r374266 <= r374269;
double r374271 = !r374270;
bool r374272 = r374268 || r374271;
double r374273 = r374261 - r374264;
double r374274 = t;
double r374275 = r374274 * r374262;
double r374276 = r374273 * r374275;
double r374277 = r374266 * r374274;
double r374278 = r374272 ? r374276 : r374277;
return r374278;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.5 |
|---|---|
| Target | 3.2 |
| Herbie | 1.9 |
if (- (* x y) (* z y)) < -4.475976711779892e+215 or 1.4093175561301368e+137 < (- (* x y) (* z y)) Initial program 24.7
rmApplied add-cube-cbrt25.4
Applied associate-*r*25.4
Simplified25.4
rmApplied pow125.4
Applied pow125.4
Applied pow125.4
Applied pow-prod-down25.4
Applied pow125.4
Applied pow125.4
Applied pow-prod-down25.4
Applied pow-prod-down25.4
Applied pow-prod-down25.4
Simplified25.4
rmApplied *-un-lft-identity25.4
Applied associate-*l*25.4
Simplified1.9
if -4.475976711779892e+215 < (- (* x y) (* z y)) < 1.4093175561301368e+137Initial program 2.0
Final simplification1.9
herbie shell --seed 2019305 +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.2318795828867769e-80) (* (* y t) (- x z)) (if (< t 2.5430670515648771e83) (* y (* t (- x z))) (* (* y (- x z)) t)))
(* (- (* x y) (* z y)) t))