\frac{x - y}{z - y} \cdot t\begin{array}{l}
\mathbf{if}\;t \le 3.2554078815889216 \cdot 10^{-281} \lor \neg \left(t \le 2.67299805340548718 \cdot 10^{-148}\right):\\
\;\;\;\;\frac{x - y}{z - y} \cdot t\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(x - y\right) \cdot t}{z - y}\\
\end{array}double f(double x, double y, double z, double t) {
double r441032 = x;
double r441033 = y;
double r441034 = r441032 - r441033;
double r441035 = z;
double r441036 = r441035 - r441033;
double r441037 = r441034 / r441036;
double r441038 = t;
double r441039 = r441037 * r441038;
return r441039;
}
double f(double x, double y, double z, double t) {
double r441040 = t;
double r441041 = 3.2554078815889216e-281;
bool r441042 = r441040 <= r441041;
double r441043 = 2.6729980534054872e-148;
bool r441044 = r441040 <= r441043;
double r441045 = !r441044;
bool r441046 = r441042 || r441045;
double r441047 = x;
double r441048 = y;
double r441049 = r441047 - r441048;
double r441050 = z;
double r441051 = r441050 - r441048;
double r441052 = r441049 / r441051;
double r441053 = r441052 * r441040;
double r441054 = r441049 * r441040;
double r441055 = r441054 / r441051;
double r441056 = r441046 ? r441053 : r441055;
return r441056;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 1.9 |
|---|---|
| Target | 2.0 |
| Herbie | 1.9 |
if t < 3.2554078815889216e-281 or 2.6729980534054872e-148 < t Initial program 1.9
if 3.2554078815889216e-281 < t < 2.6729980534054872e-148Initial program 1.8
rmApplied associate-*l/1.8
Final simplification1.9
herbie shell --seed 2020018 +o rules:numerics
(FPCore (x y z t)
:name "Numeric.Signal.Multichannel:$cput from hsignal-0.2.7.1"
:precision binary64
:herbie-target
(/ t (/ (- z y) (- x y)))
(* (/ (- x y) (- z y)) t))