\left(x \cdot y - z \cdot y\right) \cdot t
\begin{array}{l}
\mathbf{if}\;x \cdot y - z \cdot y \le -4.63836268060687826 \cdot 10^{307}:\\
\;\;\;\;{\left(\left(t \cdot y\right) \cdot \left(x - z\right)\right)}^{1}\\
\mathbf{elif}\;x \cdot y - z \cdot y \le 1.95547411306134 \cdot 10^{248}:\\
\;\;\;\;\left(x \cdot y - z \cdot y\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 r539014 = x;
double r539015 = y;
double r539016 = r539014 * r539015;
double r539017 = z;
double r539018 = r539017 * r539015;
double r539019 = r539016 - r539018;
double r539020 = t;
double r539021 = r539019 * r539020;
return r539021;
}
double f(double x, double y, double z, double t) {
double r539022 = x;
double r539023 = y;
double r539024 = r539022 * r539023;
double r539025 = z;
double r539026 = r539025 * r539023;
double r539027 = r539024 - r539026;
double r539028 = -4.638362680606878e+307;
bool r539029 = r539027 <= r539028;
double r539030 = t;
double r539031 = r539030 * r539023;
double r539032 = r539022 - r539025;
double r539033 = r539031 * r539032;
double r539034 = 1.0;
double r539035 = pow(r539033, r539034);
double r539036 = 1.955474113061338e+248;
bool r539037 = r539027 <= r539036;
double r539038 = r539027 * r539030;
double r539039 = r539032 * r539030;
double r539040 = r539023 * r539039;
double r539041 = r539037 ? r539038 : r539040;
double r539042 = r539029 ? r539035 : r539041;
return r539042;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.8 |
|---|---|
| Target | 3.1 |
| Herbie | 1.4 |
if (- (* x y) (* z y)) < -4.638362680606878e+307Initial program 63.4
rmApplied pow163.4
Applied pow163.4
Applied pow-prod-down63.4
Simplified0.2
if -4.638362680606878e+307 < (- (* x y) (* z y)) < 1.955474113061338e+248Initial program 1.6
if 1.955474113061338e+248 < (- (* x y) (* z y)) Initial program 39.5
rmApplied distribute-rgt-out--39.5
Applied associate-*l*0.4
Final simplification1.4
herbie shell --seed 2020062 +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))