\frac{x - y}{z - y} \cdot t\begin{array}{l}
\mathbf{if}\;\frac{x - y}{z - y} = -\infty:\\
\;\;\;\;{\left(\frac{\left(x - y\right) \cdot t}{z - y}\right)}^{1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x - y}{z - y} \cdot t\\
\end{array}double f(double x, double y, double z, double t) {
double r552582 = x;
double r552583 = y;
double r552584 = r552582 - r552583;
double r552585 = z;
double r552586 = r552585 - r552583;
double r552587 = r552584 / r552586;
double r552588 = t;
double r552589 = r552587 * r552588;
return r552589;
}
double f(double x, double y, double z, double t) {
double r552590 = x;
double r552591 = y;
double r552592 = r552590 - r552591;
double r552593 = z;
double r552594 = r552593 - r552591;
double r552595 = r552592 / r552594;
double r552596 = -inf.0;
bool r552597 = r552595 <= r552596;
double r552598 = t;
double r552599 = r552592 * r552598;
double r552600 = r552599 / r552594;
double r552601 = 1.0;
double r552602 = pow(r552600, r552601);
double r552603 = r552595 * r552598;
double r552604 = r552597 ? r552602 : r552603;
return r552604;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.2 |
|---|---|
| Target | 2.2 |
| Herbie | 1.6 |
if (/ (- x y) (- z y)) < -inf.0Initial program 64.0
rmApplied *-un-lft-identity64.0
Applied add-cube-cbrt64.0
Applied times-frac64.0
Applied associate-*l*8.2
rmApplied pow18.2
Applied pow18.2
Applied pow-prod-down8.2
Applied pow18.2
Applied pow-prod-down8.2
Simplified0.3
rmApplied associate-*r/0.3
if -inf.0 < (/ (- x y) (- z y)) Initial program 1.6
Final simplification1.6
herbie shell --seed 2020021
(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))