\frac{x}{y} \cdot \left(z - t\right) + t\begin{array}{l}
\mathbf{if}\;y \le -5.910237375042319 \cdot 10^{67} \lor \neg \left(y \le 4.0064465433570219 \cdot 10^{-49}\right):\\
\;\;\;\;\frac{x}{y} \cdot \left(z - t\right) + t\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{x \cdot z}{y} - \frac{t \cdot x}{y}\right) + t\\
\end{array}double f(double x, double y, double z, double t) {
double r582654 = x;
double r582655 = y;
double r582656 = r582654 / r582655;
double r582657 = z;
double r582658 = t;
double r582659 = r582657 - r582658;
double r582660 = r582656 * r582659;
double r582661 = r582660 + r582658;
return r582661;
}
double f(double x, double y, double z, double t) {
double r582662 = y;
double r582663 = -5.910237375042319e+67;
bool r582664 = r582662 <= r582663;
double r582665 = 4.006446543357022e-49;
bool r582666 = r582662 <= r582665;
double r582667 = !r582666;
bool r582668 = r582664 || r582667;
double r582669 = x;
double r582670 = r582669 / r582662;
double r582671 = z;
double r582672 = t;
double r582673 = r582671 - r582672;
double r582674 = r582670 * r582673;
double r582675 = r582674 + r582672;
double r582676 = r582669 * r582671;
double r582677 = r582676 / r582662;
double r582678 = r582672 * r582669;
double r582679 = r582678 / r582662;
double r582680 = r582677 - r582679;
double r582681 = r582680 + r582672;
double r582682 = r582668 ? r582675 : r582681;
return r582682;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.0 |
|---|---|
| Target | 2.1 |
| Herbie | 1.5 |
if y < -5.910237375042319e+67 or 4.006446543357022e-49 < y Initial program 0.9
if -5.910237375042319e+67 < y < 4.006446543357022e-49Initial program 3.6
rmApplied add-cube-cbrt4.3
Applied associate-*l*4.3
Taylor expanded around 0 2.3
Final simplification1.5
herbie shell --seed 2020060
(FPCore (x y z t)
:name "Numeric.Signal.Multichannel:$cget from hsignal-0.2.7.1"
:precision binary64
:herbie-target
(if (< z 2.759456554562692e-282) (+ (* (/ x y) (- z t)) t) (if (< z 2.326994450874436e-110) (+ (* x (/ (- z t) y)) t) (+ (* (/ x y) (- z t)) t)))
(+ (* (/ x y) (- z t)) t))