\frac{x}{y} \cdot \left(z - t\right) + t\begin{array}{l}
\mathbf{if}\;z \le -3.003849201078750171591701483022669744276 \cdot 10^{-171}:\\
\;\;\;\;t + \frac{z - t}{\frac{y}{x}}\\
\mathbf{elif}\;z \le 5.190570701136931203412118291469813860427 \cdot 10^{-194}:\\
\;\;\;\;\frac{x \cdot \left(z - t\right)}{y} + t\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{y} \cdot \left(z - t\right) + t\\
\end{array}double f(double x, double y, double z, double t) {
double r514130 = x;
double r514131 = y;
double r514132 = r514130 / r514131;
double r514133 = z;
double r514134 = t;
double r514135 = r514133 - r514134;
double r514136 = r514132 * r514135;
double r514137 = r514136 + r514134;
return r514137;
}
double f(double x, double y, double z, double t) {
double r514138 = z;
double r514139 = -3.00384920107875e-171;
bool r514140 = r514138 <= r514139;
double r514141 = t;
double r514142 = r514138 - r514141;
double r514143 = y;
double r514144 = x;
double r514145 = r514143 / r514144;
double r514146 = r514142 / r514145;
double r514147 = r514141 + r514146;
double r514148 = 5.190570701136931e-194;
bool r514149 = r514138 <= r514148;
double r514150 = r514144 * r514142;
double r514151 = r514150 / r514143;
double r514152 = r514151 + r514141;
double r514153 = r514144 / r514143;
double r514154 = r514153 * r514142;
double r514155 = r514154 + r514141;
double r514156 = r514149 ? r514152 : r514155;
double r514157 = r514140 ? r514147 : r514156;
return r514157;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.0 |
|---|---|
| Target | 2.1 |
| Herbie | 2.1 |
if z < -3.00384920107875e-171Initial program 1.5
Taylor expanded around 0 7.9
Simplified1.4
if -3.00384920107875e-171 < z < 5.190570701136931e-194Initial program 3.3
rmApplied associate-*l/3.9
if 5.190570701136931e-194 < z Initial program 1.7
Final simplification2.1
herbie shell --seed 2019350
(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))